Javascript 查找数组的最大值,如果数组为空,则为0
我需要一种干净的方法来为JavaScript中的数组查找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
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解决方案很好。