12

通常当我需要找到一个数组的最大值时,我会使用这个非常简单的代码: var max = Math.max.apply(Math, array);

但是,现在我有一个多维数组,其中每一行都有一个 5 列的数组。有没有类似的方法来找到某一列的最大值?现在我正在做:

var maxFunc = function(data){
    var max = 0;
    data.forEach(function(value){
        max = Math.max(max, value[0]);
    });
    return max;
};

我很好奇是否有更漂亮/更简单的方法来做到这一点?

4

2 回答 2

16

我会这样写:

Math.max.apply(Math, array.map(v => v[0]));

array.map根据您的选择逻辑转换原始数组,在这种情况下返回第一项。然后将转换后的数组输入Math.max()

为避免创建新数组,您还可以将数组缩减为单个值:

array.reduce((max, current) => Math.max(max, current[0]), -Infinity)

如您所见,我们需要添加 的初始值-Infinity,如果数组为空,则返回该值。

于 2012-06-25T13:59:33.857 回答
9

这是一个很好的应用程序Array.prototype.reduce

max = data.reduce(function(previousVal, currentItem, i, arr) {
    return Math.max(previousVal, currentItem[0]);
}, Number.NEGATIVE_INFINITY);

这也避免了如果所有值data都小于0. 您应该比较Number.NEGATIVE_INFINITY而不是0.

或者,您可以在减少到最大值之前对数据进行标准化:

max = data.map(function (d) {
    return d[0];
}).reduce(function (p, c, i, arr) {
    return Math.max(p, c);
});
于 2012-06-25T14:02:37.600 回答