有没有一种简单的方法可以在JavaScript中找到下面给出的数组中的最大数字?
[3,4,[22,21],5,9,5]
Math.max.apply(null,numbers)
提供NaN
。
答案 0 :(得分:3)
您的示例是一个数组,其中另一个数组嵌套了一层深度。假设只有一个级别的嵌套,首先是flatten the array,然后你应用Math.max
技巧:
var a = [3,4,[22,21],5,9,5];
var max = Math.max.apply(Math, [].concat.apply([], a));
console.log(max);

答案 1 :(得分:2)
这是使用处理嵌套数组的reduce
版本的解决方案。
function nestedReduce(array, fn, initial) {
return array.reduce(function(result, elt) {
return fn(result, Array.isArray(elt) ? nestedReduce(elt, fn, initial) : elt);
}, initial);
}
console.log(nestedReduce([3,4,[22,21],5,9,5], Math.max, -Infinity));

这将处理任何级别的嵌套。
答案 2 :(得分:2)
您可以使用Array#reduce
递归。
这适用于多个嵌套数组。
var array = [3, 4, [22, 21], 5, 9, 5, [[[42]]]],
maxValue = array.reduce(function max(r, a, i) {
var v = Array.isArray(a) ? a.reduce(max, undefined) : a;
return !i || r < v ? v : r;
}, undefined);
console.log(maxValue);
torazaburo与-Infinity
和Math.max
建议的修改。
var array = [3, 4, [22, 21], 5, 9, 5, [[[42]]]],
maxValue = array.reduce(function max(r, a, i) {
return Math.max(r, Array.isArray(a) ? a.reduce(max, -Infinity) : a);
}, -Infinity);
console.log(maxValue);
答案 3 :(得分:1)
我会这样做;
function getMax(a){
return Math.max(...a.map(e => Array.isArray(e) ? getMax(e) : e));
}
var arr = [3, 4, [22, 21], 5, 9, 5, [[[42]]], 41];
console.log(getMax(arr));