返回最大数字数组

时间:2016-04-29 13:49:24

标签: javascript multidimensional-array

我有这个小脚本将返回最大数量的数组,它可以工作,除了它不适用于多维数组。

如何调整它以返回多维数组中最大数字的数组?

来源:

function largestOfFour(arr) {
    for(var x=0;x < arr.length; x++){
        var largest = Math.max.apply(Math, arr[x]);
        return largest;
    }
}

示例:

> function largestOfFour(arr) {
...     for(var x=0;x < arr.length; x++){
.....         var largest = Math.max.apply(Math, arr[x]);
.....         return largest;
.....     }
... }
undefined
> largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
5
>

预期产出:

[5, 27, 39, 1001]

2 个答案:

答案 0 :(得分:2)

您可以使用ES6 arrow functionspread operator

arr.map(e => Math.max(...e))

map将在主数组的所有元素上迭代(即嵌套数组),Math.max(...e)将返回该数组的max元素。 ...e会将e数组的元素分别传递给max()

&#13;
&#13;
var arr = [ [4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1] ]

var res = arr.map(e => Math.max(...e))

document.write(res);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

只需映射单个结果的结果。

function largestOfFour(array) {
    return array.map(function (a) {
        return Math.max.apply(null, a);
    });
}

var largest = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
document.write('<pre>' + JSON.stringify(largest, 0, 4) + '</pre>');

上面提到的(@Tushar)短版

function largestOfFour(array) {
    return array.map(Math.max.apply.bind(Math.max, null));
}

var largest = largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
document.write('<pre>' + JSON.stringify(largest, 0, 4) + '</pre>');