Подтвердить что ты не робот

Javascript max() для столбца массива

Обычно, когда мне нужно найти максимальное значение массива, я использую этот очень простой код: 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;
};

Мне было любопытно, был ли более красивый/более простой способ сделать это?

4b9b3361

Ответ 1

Я бы написал это как таковое:

Math.max.apply(Math, array.map(function(v) {
  return v[0];
}));

array.map преобразует исходный массив на основе вашей логики выбора, возвращая первый элемент в этом случае. Преобразованный массив затем подается в Math.max()

Ответ 2

Это отличное приложение для 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);
});