JS:数组的最大元素,小于给定变量

时间:2015-12-28 13:13:41

标签: javascript arrays

鉴于:

var array = [1,2,5,10];
var limit = 8;

我正在寻找一种方法来找到数组的最大元素,小于限制8.类似于:

Math.max(array, "while < limit");

我试过了:

Math.min(Math.max(array), limit)

显然在数组和限制的所有情况下都不起作用。

编辑:

输入数组不一定要排序:

var array = [10,-10,10,-10];
var limit = 5;

预期结果为-10。

5 个答案:

答案 0 :(得分:4)

&#13;
&#13;
var array = [1,2,5,10];
var limit = 8;
alert(Math.max.apply(Math, array.filter(function(x){return x <= limit})));
&#13;
&#13;
&#13;

答案 1 :(得分:3)

您可以sortfilter然后pop

&#13;
&#13;
var array = [1,2,5,10];
var limit = 8;

var largest = array.sort().filter(item => (item < limit)).pop();

console.log(largest);
&#13;
&#13;
&#13;

答案 2 :(得分:2)

你可以只做一个简单的for循环,你可以过滤掉所有小于max和sort和max的数字,或者你可以使用reduce就像做一个for循环一样。

for循环(可以使用forEach)

var array = [1, 2, 5, 10];
var limit = 8;
var result = array[1];
for (var i = 1; i < array.length; i++) {
  if (array[i] <= limit && array[i] > result) {
    result = array[i];
  }
}
console.log(result);

使用Max

进行过滤

var array = [1, 2, 5, 10];
var limit = 8;

var result = Math.max.apply([], array.filter(function(val) {
  return val < limit
}));
console.log(result);

降低

var array = [1,2,5,10];
var limit = 8;

var temp = array[0];
var result = array.reduce( function (num, val ) {
    return val > num && val <= limit ? val : num
}, temp);
console.log(result)

答案 3 :(得分:1)

您可以尝试这种方式:

var array = [1,2,5,10,7];
var limit = 8;

var max=0;
for(var i=0;i<array.length;i++)
{   
   if(array[i] > max && array[i] < limit)
      max=array[i];
}

console.log(max);

答案 4 :(得分:0)

&#13;
&#13;
var array = [1,2,5,10];
var limit = 8;
var closest = null;

array.forEach(function(el){
  if (el <= limit && (closest == null || (limit - el) < (limit - closest))) {
    closest = el;
  }
});

alert(closest);
&#13;
&#13;
&#13;