查找数组的最大值,如果数组为空,则为0

时间:2016-07-21 09:20:27

标签: javascript

我需要一种干净的方式在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

5 个答案:

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