我有这个问题,其中我想循环一个从大数字到较小数字的数组,并将数组中的数字与提供的x进行比较。
我的代码应该是这样的:
function convertToRoman(num) {
var decimalNum = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
while (num > 0){ // to prevent the number from reaching zero
for (var k = 0; k < decimalNum.length; k++) { //to loop through the array
if(num > decimalNum[k]) {return k}; //this is the part in which I wanted to return the element that is next in the array that is less than the num
}
}
}
convertToRoman(36);
例如,如果num = 36,那么数组中小于36的下一个数字将是10.所以我想返回10.我该怎么做?
我试图在网上找到解决方案,但我找到的唯一解决方案是Java或C ++,它与JavaScript完全不同,对吗?而且我也不认为应该使用二分搜索......
答案 0 :(得分:1)
返回的值不是您所使用的索引:
function convertToRoman(pNumber) {
var array = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
for (var i = 0; i < array.length; i++) {
if (pNumber > array[i]) {//if the current item is smaller than the parameter
return array[i]; //return the value at the index you are on
};
}
}
console.log(convertToRoman(36));//returns 10
当您到达较小的项目时,请返回该项目
答案 1 :(得分:0)
为此你应该得到的值不是索引
function convertToRoman(num) {
var decimalNum = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
// while (num > 0) { // to prevent the number from reaching zero
for (var k = 0; k < decimalNum.length; k++) { //to loop through the array
if (num > decimalNum[k]) {
return decimalNum[k]
}; //this is the part in which I wanted to return the element that is next in the array that is less than the num
}
// }
}
console.log(convertToRoman(36));
答案 2 :(得分:0)
这是一个可以在IE中运行的解决方案,无论数组中的值如何排序
var lesser = decimalNum.filter(function(dec) {
return dec < num;
});
var result = Math.max.apply(null, lesser);
如果您知道decimalNum
数组是按照代码中的方式进行排序的,那么您只需将Math.max
部分替换为lesser[0]