'Find max for an array, 0 if array is empty
I need a clean way of finding max
for an array in JavaScript. Say it is arrayMax
, then:
arrayMax([]) // => 0
arrayMax([1], [2]) // => 2
arrayMax([-1]) // => -1
What I've tried:
Math.max.apply(null, [1,2,3]) // => 3
But it doesn't work for:
Math.max.apply(null, []) // => -Infinity
Note that it's not an duplication with this question since I want the empty array to return 0, instead of -Infinity
Solution 1:[1]
You need a function that checks the length of the array:
function arrayMax(arr) {
return arr.length ? Math.max.apply(null, arr) : 0;
};
Solutions that start with 0 will produce wrong results for arrays with only negative values.
With ES6 support, you can avoid the apply
method and use the spread operator:
function arrayMax(arr) {
return arr.length ? Math.max(...arr) : 0;
};
Solution 2:[2]
check array's length property.
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]))
Solution 3:[3]
This method does not require checking array's length. There may be some other drawbacks though:
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([]) );
Solution 4:[4]
myArray.reduce(function(prev,current){
return prev===null ? current : Math.max(prev, current);
}, null) || 0
or very succinctly with ES6 arrow functions:
myArray.reduce((prev,current) =>
prev===null ? current : Math.max(prev, current), null) || 0
Solution 5:[5]
You can do it by,
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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Satpal |
Solution 3 | Mohit Bhardwaj |
Solution 4 | |
Solution 5 | Rajaprabhu Aravindasamy |