Статьи по JavaScript

Как найти пересечение и разность множеств в JavaScript

Для реализации некоторых алгоритмов необходимо уметь вычислять пересечение или дифференцирование наборов данных. В JavaScript операция может быть легко реализована с помощью метода filter() и concat().

Пересечение множеств в JavaScript

Пересечение двух множеств – это элементы, которые встречаются в обоих векторах. На рисунке ниже область выделена синим цветом.

Intersección de dos conjuntos
пересечение двух множеств

Простейшая реализация этой операции может быть выполнена путем фильтрации элементов первого множества, которые также находятся во втором. Это можно сделать с помощью метода filter(), как показано ниже.

const arr1 = [1, 2, 3, 4]; const arr2 = [3, 4, 5, 6]; const intersection = arr1.filter(x => arr2.includes(x)); // [3, 4]
Code language: JavaScript (javascript)

Разность множеств в JavaScript

Разность двух множеств – это элементы одного из них, которых нет в другом. Графически это можно увидеть на следующем рисунке.

Diferencia de dos conjuntos
Разница между двумя множествами

Как и в предыдущем случае, эта операция может быть легко реализована на JavaScript с помощью метода filter(). Выбор всех элементов первого множества, которые не входят во второе.

const arr1 = [1, 2, 3, 4]; const arr2 = [3, 4, 5, 6]; const difference = arr1.filter(x => !arr2.includes(x)); // [1, 2]
Code language: JavaScript (javascript)

Это можно аналогично применить и ко второму набору.

Симметричная разность множеств в JavaScript

Наконец, симметричная разность – это все элементы обоих множеств минус их пересечение. Именно эти элементы находятся в зонах, выделенных синим цветом на следующем графике.

Diferencia simétrica de dos conjuntos
Симметричная разность двух множеств

Это может быть достигнуто простым объединением элементов разницы между первым и вторым множествами.

const arr1 = [1, 2, 3, 4]; const arr2 = [3, 4, 5, 6]; const difference1 = arr1.filter(x => !arr2.includes(x)); // [1, 2] const difference2 = arr2.filter(x => !arr1.includes(x)); // [5, 6] const symmetric = difference1.concat(difference2); // [1, 2, 5, 6]
Code language: JavaScript (javascript)

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

const arr1 = [1, 2, 3, 4]; const arr2 = [3, 4, 5, 6]; const symmetric = arr1.filter(x => !arr2.includes(x)).concat(arr2.filter(x => !arr1.includes(x)));
Code language: JavaScript (javascript)

Заключение

Мы увидели, как метод filter() можно использовать для получения простым способом пересечения и разности векторов в JavaScript.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *