Как правильно сравнить данные массива. У меня есть массив с тремя подмассивами:
var arr = [
[10, 10, 10, 20, 60],
[10, 10, 50, 10, 10],
[20, 10, 30, 20, 10]
];
Мне нужно собрать один массив, с максимальными значениями этих трех массивов. Длина под массивов всегда одинаковая, если в одном 5 значений то и в других двух столько же.
На выходе должен получится вот такой массив: var arr = [20, 10, 50, 20, 60]
const arr = [
[10, 10, 10, 20, 60],
[10, 10, 50, 10, 10],
[20, 10, 30, 20, 10]
];
const arrLength = arr.length;
const subArrLength = arr[0].length;
const flattenArr = [].concat(...arr);
const result = [];
for (let i = 0; i < subArrLength; i++) {
const indexes = [];
for (let j = 0; j < arrLength; j++) {
indexes.push(flattenArr[i + j * subArrLength]);
}
result.push(Math.max(...indexes));
}
console.log(result); // [20, 10, 50, 20, 60];
Самое простое решение: бежать по одному из внутренних массивов и сравнивать текущий элемент со значениями на этом же индексе в соседних массивах и выбирать максимальный.
Реализовать можно с помощью метода map, например так:
function* nextMax(arr, index) { // получаем массив соответствующий колонке index
for (var i = 0; i < arr.length; i++) {
yield arr[i][index];
}
}
var arr = [
[10, 10, 10, 20, 60],
[10, 10, 50, 10, 10],
[20, 10, 30, 20, 10]
];
var dest = arr[0].map((cur, i) => Math.max(...(nextMax(arr, i))));
console.log(dest);
Альтернативным решение было бы использование метода reduce с постепенным сравнением:
var arr = [
[10, 10, 10, 20, 60],
[10, 10, 50, 10, 10],
[20, 10, 30, 20, 10]
];
var dest = arr.reduce((acc, cur) =>
acc.map((el, i) => Math.max(el, cur[i]))
)
console.log(dest);
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости