在JavaScript中查找数组中的最大数字

时间:2016-08-27 07:55:42

标签: javascript

有没有一种简单的方法可以在JavaScript中找到下面给出的数组中的最大数字?

[3,4,[22,21],5,9,5]

Math.max.apply(null,numbers)提供NaN

4 个答案:

答案 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-InfinityMath.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));