鉴于:
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。
答案 0 :(得分:4)
var array = [1,2,5,10];
var limit = 8;
alert(Math.max.apply(Math, array.filter(function(x){return x <= limit})));
&#13;
答案 1 :(得分:3)
var array = [1,2,5,10];
var limit = 8;
var largest = array.sort().filter(item => (item < limit)).pop();
console.log(largest);
&#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)
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;