【发布时间】:2017-01-21 14:27:03
【问题描述】:
我知道罗马化数字有几种不同的方法,但我正在尝试自己编造,想知道这种方法是否可行。
每次迭代都会返回 Null,我似乎看不到这里缺少什么。任何帮助将不胜感激!
var array;
var result = [];
function convertToRoman(num) {
array = num.toString().split('').reverse();
roman = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX",
"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC",
"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"
];
for (i = 0, j = 0; i < array.length; i++, j += 10) {
var location = array[i] + j;
result = result.concat(roman[location]);
}
return result.reverse().join();
}
console.log(convertToRoman(123));
【问题讨论】:
-
改用
j + array[i]。呃。array[i]是一个字符串,做你想做的事最好使用location = 10*j + Number(array[i])。 -
你真的真的应该在你的函数中声明(并初始化)
array和result。否则当你第二次调用它时它会造成严重破坏。 -
for (var i = 0, j = 0; i < array.length; i++, j += 10) { var location = array[i] + j; result = result.concat(roman[location]); console.log(location,result) }会给你一些想法 -
谢谢大家的建议。实际上,问题在于包含字符串而不是实际数字的数组。使用 Number() 或 parseInt() 将数组转换回整数来修复它。还要感谢您提供有关范围的提示。
标签: javascript arrays for-loop