我需要一种干净的方式在JavaScript中查找数组的max
。说它是arrayMax
,然后:
arrayMax([]) # 0
arrayMax([1], [2]) # 2
arrayMax([-1]) # -1
Thx:)
我尝试过的事情:
Math.max.apply(null, [1,2,3]) # 3
但它并不起作用:
Math.max.apply(null, []) # -Infinity
请注意,它不是this question的重复,因为我希望空数组返回0,而不是-Infinity
答案 0 :(得分:4)
检查数组的长度属性。
var arrayMax = function(arr) {
//Check length
if (arr.length == 0)
return 0;
//Otherwise use take advantage of native API
return Math.max.apply(null, arr);
};
console.log(arrayMax([]))
console.log(arrayMax([3,5,1]))
答案 1 :(得分:4)
您需要一个检查数组长度的函数:
function arrayMax(arr) {
return arr.length ? Math.max.apply(null, arr) : 0;
};
以0开头的解决方案会对只有负值的数组产生错误的结果。
在ES6支持下,您可以避免使用apply
方法并使用扩展运算符:
function arrayMax(arr) {
return arr.length ? Math.max(...arr) : 0;
};
答案 2 :(得分:2)
此方法不需要检查数组的长度。可能还有其他一些缺点:
function arrayMax( arr )
{
return arr.reduce(function(prevValue, curValue, curIndex){
return Math.max( prevValue, curValue );
}, 0);
}
console.log( arrayMax(["1", "-2"]) );
console.log( arrayMax(["10", "2", ""]) );
console.log( arrayMax([]) );

答案 3 :(得分:1)
myArray.reduce(function(prev,current){
return prev===null ? current : Math.max(prev, current);
}, null) || 0
或非常简洁地使用ES6箭头功能:
myArray.reduce((prev,current) =>
prev===null ? current : Math.max(prev, current), null) || 0
答案 4 :(得分:0)
你可以通过,
来做到function arrayMax(){
var val = Math.max.apply(null, [].concat.apply([], [...arguments]));
return val == -Infinity ? 0 : val
}
console.log(arrayMax([1],[22,3,2],[3])); //22
console.log(arrayMax([1],[3])); //3
console.log(arrayMax([1])); //1
console.log(arrayMax([])); //0