JavaScript-массивы: пересечение, разность и объединение в ES6

Шпаргалка для работы с массивами в JavaScript ES6+.

seapp88

Пересечение даст нам элементы, которые объединяют оба массива, в этом случае результат должен быть [1,5].

let intersection = arrA.filter(x => arrB.includes(x));

Разность будет выводить элементы из массива A, которых нет в массиве B. Результат будет [3,4].

let difference = arrA.filter(x => !arrB.includes(x));

В этом случае вы получите массив, содержащий все элементы arrA, которых нет в arrB, и наоборот, так что результат должен быть [2,3,4,6,7].

let difference = arrA.filter(x => !arrB.includes(x)).concat(arrB.filter(x => !arrA.includes(x)));
​ seapp88

Объединение должно быть самым простым из них всех, в конце концов, результатом должны быть все элементы из A, все из B или оба, как это [1,2,3,4,5,6,7].

let union = [...arrA, ...arrB];

Но есть проблема в том, что мы получим дублированные элементы, так что теоретически это не объединение. Для этого мы можем использовать new Set():

let union = [...new Set([...arrA, ...arrB)];
0
9 комментариев
Написать комментарий...
Иван Колыхалов

Отличная шпора! Спасибо!

Ответить
Развернуть ветку
Evgenii Shpilka
Автор

Спасибо за обратную связь)

Ответить
Развернуть ветку
Anton Averin

а как в примере с пересечениями вывести только уникальные значения? допустим если в одном из массивов 2 раза цифра "5" встречается но мне нужно лишь раз ёё вывести?

Ответить
Развернуть ветку
Діма Петращук

Нашли ответ на этот вопрос? Тоже интересует

Ответить
Развернуть ветку
Anton Averin

Приветствую! Нет, не нашел, пришлось использовать два раза фильтр)

Ответить
Развернуть ветку
Елена Огнерысь

А ведь если в исходных массивах есть повторяющиеся элементы, то Set недобрую службу сослужит..

Ответить
Развернуть ветку
Evgenii Shpilka
Автор

Например?

Ответить
Развернуть ветку
Evgenii Shpilka
Автор

В поледнем примере есть опечатка(
Должно быть так:
let union = [...new Set([...arrA, ...arrB])]; 

Ответить
Развернуть ветку
Родион Калимуллин

только хотел написать, что да неверно, там будем массив1 + массив2

Ответить
Развернуть ветку
6 комментариев
Раскрывать всегда