Как сравнить подмассивы?

209
21 апреля 2017, 21:07

Как правильно сравнить данные массива. У меня есть массив с тремя подмассивами:

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]

Answer 1

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

Answer 2

Самое простое решение: бежать по одному из внутренних массивов и сравнивать текущий элемент со значениями на этом же индексе в соседних массивах и выбирать максимальный.

Реализовать можно с помощью метода 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);

READ ALSO
Пример js sortable

Пример js sortable

Нужен пример подобного поведения - плагин или существующая реализация (jQueryUI Sortable работает не совсем так, например) когда плейсхолдер в сортируемом...

247
Как вставить(экранировать) переменную в место перед точкой JS

Как вставить(экранировать) переменную в место перед точкой JS

В переменной itemNumber хранится число Есть объекты типа cartname1

199
javascript чтение из txt файла

javascript чтение из txt файла

Нужно считать данные их txt файла на javascript, откуда-бы не взял пример, у меня не работает:

383
Загрузка заднего фона на сайте в соответствии с расширением монитора

Загрузка заднего фона на сайте в соответствии с расширением монитора

Как правильно реализовать загрузку заднего фона на сайте с соответствие с расширением монитора посетителя?

249