【问题标题】:Returning array of largest numbers [duplicate]返回最大数字的数组[重复]
【发布时间】:2016-08-24 17:16:04
【问题描述】:

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

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

来源:

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]

【问题讨论】:

标签: javascript multidimensional-array


【解决方案1】:

你可以使用 ES6 arrow functionspread operator

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

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

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

【讨论】:

  • 我真的很喜欢。 :)
【解决方案2】:

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

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>');

【讨论】:

  • 这很有道理,谢谢。
  • @Tushar 越来越短 arr.map(e =&gt; Math.max(...e))
  • @isvforall ES6,耶!更新了我的答案。谢谢:)
猜你喜欢
  • 2020-04-15
  • 2022-01-09
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 2018-03-30
  • 2018-02-17
  • 1970-01-01
相关资源
最近更新 更多