Как я могу использовать Reduce для расчета пересечения нескольких массивов? - PullRequest
0 голосов
/ 12 мая 2018

Пример:

myArray = [[1,2,3,4],
           [2,3,4,5], 
           [3,4,5,6]
          ];

Ожидаемый результат:

newArray = [3,4]

Как создать новый массив со значениями, присутствующими во всех 3 массивах?

Ответы [ 2 ]

0 голосов
/ 12 мая 2018

Вы можете использовать .filter() для извлечения соответствующих значений:

let myArray = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]];

let intersect = ([f, ...r]) => f.filter(v => r.every(a => a.includes(v)));

console.log(intersect(myArray));
0 голосов
/ 12 мая 2018

При уменьшении вернуть пересечение аккумулятора с текущим подмассивом, перебираемым по:

const myArray = [[1,2,3,4], [2,3,4,5], [3,4,5,6]];
const intersection = myArray.reduce((a, arr) => (
  a.filter(num => arr.includes(num))
));
console.log(intersection);
...