Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ES6
Code

Понимание наборов с использованием JavaScript

by
Difficulty:IntermediateLength:MediumLanguages:

Russian (Pусский) translation by Masha Kolesnikova (you can also view the original English article)

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

Другое приложение - это проблемы, требующие от вас поиска связей между элементами. Спецификация ECMAScript не включает в себя методы работы с наборами таким образом. Но можно создать свой собственный.

Ниже приведен обзор теории множеств с практическими приложениями, которые вы можете использовать для расширения возможностей JavaScript и решения более сложных задач.

Содержание

  • Основы
  • Объединение
  • Пересечение
  • Разница
  • Симметричная разница
  • Дополнение
  • Обзор

Основы

Набор представляет собой неупорядоченный набор элементов, которые являются уникальными. Например, список всех сотрудников вашей работы - это набор. Каждый сотрудник будет элементом в наборе. В действительности эти элементы будут храниться с использованием номера идентификатора или социального обеспечения, поскольку это те значение, которые мы можем гарантировать, будут уникальными. Обратите внимание, что порядок этих элементов не имеет к нам отношения, потому что сортировка идентификаторов или номеров социального страхования не имеет смысла.

Мы называем наш набор сотрудников универсальным набором, поскольку он содержит все рассматриваемые элементы. Представим себе другой набор. Этот набор - это список сотрудников вашей компании, которые работают в инженерном отделе. Это подмножество нашего набора сотрудников, потому что каждый элемент в инженерном наборе также существует в наборе сотрудников. Еще одним подмножеством является список сотрудников, которые являются внештатными подрядчиками. Вот как мы будем создавать эти наборы в JavaScript:

Если вы хотите добавить другого человека в один из наших наборов, мы будем использовать синтаксис set.add(value) и заменить set с именем нашего набора и value со значением добавляемого элемента. Если мы попытаемся добавить элемент, который уже находится в наборе, он не будет добавлен. Пример:

Это напечатает  Set { 'Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan' }.

Прямо сейчас, вы можете подумать, ну и что? Что я могу сделать с этой информацией? Затем мы увидим, как мы можем работать с наборами, чтобы помочь нам решить некоторые общие проблемы.

Объединение

Что делать, если мы хотим найти всех сотрудников нашей компании, которые являются фрилансерами или работают в инженерном отделе? Нам нужно было бы объединить два набора, а затем удалить любые повторяющиеся имена. Это называется объединением.

Объединение двух множеств - это множество, содержащее элементы из набора или обоих множеств. Обратите внимание, как элементы нашего инженерного набора также входят в набор фрилансеров. Здесь вы можете найти объединение обоих множеств:

Оператор ... превращает наш набор в массив, и после объединения двух массивов конструктор Set удаляет повторяющиеся элементы. Объединением двух множеств будет {'Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan', 'Piccolo', 'Vegeta', 'Goku' }.

Задача

Что такое объединение множеств [1, 3, 5, 7, 9] и [2, 3, 4, 6]?

Пересечение

Предположим, мы хотим найти всех сотрудников, которые находятся в инженерном отделе, и являются фрилансерами. Это пересечение множеств. Пересечением двух множеств является множество, содержащее элементы в обоих множествах.

Чтобы воспроизвести это, мы можем выполнить поиск по одному набору и проверить, находится ли каждый элемент в другом наборе. Чтобы проверить, есть ли элемент в наборе, мы используем метод has. Пример:

Это вернет истину. Используя метод has, мы можем отфильтровать наш технический набор для элементов, которые также находятся в наборе фрилансеров.

Пересечение инженерных и фрилансеров - это Set {'Trunks', 'Gohan'}.

Задача

Что такое пересечение множеств [1, 3, 5, 7, 9] и [2, 3, 4, 6]?

Разница

Давайте рассмотрим сценарий, в котором мы хотим найти инженеров, которые не являются фрилансерами. В этом и заключается разница. Разница двух наборов - это набор, содержащий элементы, которые находятся в первом наборе, но не во втором наборе.

Для нас это означает, что мы начнем с нашего инженерного набора, а затем удалим любые элементы, которые также находятся в наборе фрилансеров. Пример:

Разница в инженерном наборе и наборе фрилансеров - Set { 'Alberta', 'Dr. Gero', 'Bulma' }. Если мы хотим получить список людей, которые являются фрилансерами, а не инженерами, мы начинаем с набора фрилансеров и удаляем элементы, которые появляются в наборе инженеров. Пример:

Это дает нам другой результат. Разница между набором фрилансеров и инженерным набором - Set { 'Piccolo', 'Vegeta', 'Goku' }.

Задача

Найдите разницу между [1, 3, 5, 7, 9] и [2, 3, 4, 6].

Найдите разницу в [2, 3, 4, 6] и [1, 3, 5, 7, 9].

Симметричная разница

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

Один из подходов, который мы можем использовать, - найти объединение двух наборов (каждый, кто является инженером, фрилансером или и тем и другим) и вычесть пересечение (каждый, кто является одновременно инженером и фрилансером). Объединив методы, которые мы использовали ранее, мы можем получить симметричную разницу со следующим кодом:

Симметричная разница нашего инженерного набора и нашего набора фрилансеров - Set { 'Alberta', 'Dr. Gero', 'Bulma', 'Piccolo', 'Vegeta', 'Goku' }.

Задача

Найти симметричную разность [1, 3, 5, 7, 9] и [2, 3, 4, 6].

Дополнение

Если у нас есть наш набор сотрудников и набор инженеров, как мы можем найти множество людей, которые не являются инженерами? Единственное, что мы можем сделать, это вычесть инженеров из набора сотрудников. Этот набор является дополнением к нашим инженерам, установленным в отношении наших сотрудников. Пример:

Дополнением к инженерному комплексу в отношении наших сотрудников является Set {'Goku', 'Piccolo', 'Vegeta'}.

Задача

Учитывая универсальное множество [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], найдем дополнение к множеству [2, 4, 6, 8, 10].

Обзор

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

  • Набор: Коллекция уникальных неупорядоченных элементов.
  • Универсальный набор: все возможные элементы набора.
  • Подмножество: меньший набор внутри набора.
  • Объединение множеств A и B: множество, содержащее элементы в A, B или и то, и другое.
  • Пересечение множеств A и B: множество, содержащее элементы из A и B.
  • Разность множеств A и B: множество, содержащее элементы в A, но не в B.
  • Симметричная разность множеств A и B: множество, содержащее элементы в A или B, но не оба.
  • Дополнение множества A: Элементы универсального набора, которые не входят в A.

Как обычно, помните, если вы ищете дополнительные ресурсы для изучения или использования в своей работе, посмотрите, что у нас есть на Envato Market.

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.