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

Javascript 查找数组的最大值,如果数组为空,则为0,javascript,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 请注意,它不是与的重复,因为我希望空数组返回0,而不是-Infinity检查数组的lengt

我需要一种干净的方法来为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

请注意,它不是与的重复,因为我希望空数组返回0,而不是
-Infinity
检查数组的length属性

var arrayMax=函数(arr){
//检查长度
如果(arr.length==0)
返回0;
//否则,请使用本机API
返回Math.max.apply(null,arr);
};
console.log(arrayMax([]))

log(arrayMax([3,5,1]))
检查数组的长度属性

var arrayMax=函数(arr){
//检查长度
如果(arr.length==0)
返回0;
//否则,请使用本机API
返回Math.max.apply(null,arr);
};
console.log(arrayMax([]))

log(arrayMax([3,5,1]))
此方法不需要检查数组的长度。不过,可能还有其他一些缺点:

函数arrayMax(arr)
{
返回arr.reduce(函数(prevValue、curveValue、curIndex){
返回Math.max(prevValue,curveValue);
}, 0);
}
log(arrayMax([“1”,“-2”]);
log(arrayMax([“10”,“2”,“”“]));

console.log(arrayMax([])此方法不需要检查数组的长度。不过,可能还有其他一些缺点:

函数arrayMax(arr)
{
返回arr.reduce(函数(prevValue、curveValue、curIndex){
返回Math.max(prevValue,curveValue);
}, 0);
}
log(arrayMax([“1”,“-2”]);
log(arrayMax([“10”,“2”,“”“]));
console.log(arrayMax([])
或者非常简洁地使用ES6箭头函数:

 myArray.reduce((prev,current) => 
     prev===null ? current : Math.max(prev, current), null) || 0
或者非常简洁地使用ES6箭头函数:

 myArray.reduce((prev,current) => 
     prev===null ? current : Math.max(prev, current), null) || 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
你可以通过

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

您需要一个检查数组长度的函数:

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;
};

您需要一个检查数组长度的函数:

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;
};


对那么让我更新我的答案。@Satpal:已尝试,并已更新。请注意,Math.max([])给出了u 0,因为[]被转换为数字0。您可以尝试Math.max([1,2,3]),然后查看how@Satpal:这不是一个重复的问题,因为我希望它为空数组返回0。
函数arrayMax(arr){return arr.reduce(函数(prevValue,curValue,curIndex){return Math.max(prevValue,curValue);},0);}
是。那么让我更新我的答案。@Satpal:已尝试,并已更新。请注意,Math.max([])给出了u 0,因为[]被转换为数字0。您可以尝试Math.max([1,2,3]),然后查看how@Satpal:这不是一个重复的问题,因为我希望它为空数组返回0。
函数arrayMax(arr){return arr.reduce(函数(prevValue,curValue,curIndex){return Math.max(prevValue,curValue);},0);}
喜欢简洁的方式:)@trincot不再喜欢简洁的方式:)@trincot不再喜欢如果我有
[-Infinity,-1]
,会返回@trincot
-1
,因此它是最大值。没错,我太快了。但是
[-Infinity]
将给出0。如果我有
[-Infinity,-1]
,会返回@trincot
-1
,因此它是最大值。没错,我太快了。但是
[-Infinity]
会给0。先生,你太棒了。
..
ftw。您的ES6解决方案很好。先生,您真是太棒了。
ftw。您的ES6解决方案很好。