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;
};
Мне было любопытно, был ли более красивый/более простой способ сделать это?
Ответы
Ответ 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);
});