如何在Javascript中找到比数组中的x小的第一个元素?

时间:2017-06-12 07:07:04

标签: javascript arrays

我有这个问题,其中我想循环一个从大数字到较小数字的数组,并将数组中的数字与提供的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完全不同,对吗?而且我也不认为应该使用二分搜索......

3 个答案:

答案 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]

即可。