Введение🤩

Set — это набор элементов. Набор может содержать только уникальные элементы. Давайте посмотрим, как создать набор в разделе ниже.

Создание пустого набора

const companies = new Set()
console.log(companies)
Set(0) {}

Создание набора из массива

const languages = [
  'English',
  'Finnish',
  'English',
  'French',
  'Spanish',
  'English',
  'French',
]
const setOfLanguages = new Set(languages)
console.log(setOfLanguages)
Set(4) {"English", "Finnish", "French", "Spanish"}

Set — это итерируемый объект, и мы можем перебирать каждый элемент.

const languages = [
  'English',
  'Finnish',
  'English',
  'French',
  'Spanish',
  'English',
  'French',
]
const setOfLanguages = new Set(languages)
for (const language of setOfLanguages) {
  console.log(language)
}
English
  Finnish
  French
  Spanish

Добавление элемента в набор

const companies = new Set() // creating an empty set
console.log(companies.size) // 0
companies.add('Google') // add element to the set
companies.add('Facebook')
companies.add('Amazon')
companies.add('Oracle')
companies.add('Microsoft')
console.log(companies.size) // 5 elements in the set
console.log(companies)
Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}

Мы также можем использовать цикл для добавления элемента в набор.

const companies = ['Google', 'Facebook', 'Amazon', 'Oracle', 'Microsoft']
setOfCompanies = new Set()
for (const company of companies) {
  setOfCompanies.add(company)
}
Set(5) {"Google", "Facebook", "Amazon", "Oracle", "Microsoft"}

Удаление элемента набора

Мы можем удалить элемент из набора, используя метод удаления.

console.log(companies.delete('Google'))
console.log(companies.size) // 4 elements left in the set

Проверка элемента в наборе

Метод has может помочь узнать, существует ли определенный элемент в наборе.

console.log(companies.has('Apple')) // false
console.log(companies.has('Facebook')) // true

Очистка набора

Он удаляет все элементы из множества.

companies.clear()
console.log(companies)
Set(0) {}

См. пример ниже, чтобы узнать, как использовать set.

const languages = [
  'English',
  'Finnish',
  'English',
  'French',
  'Spanish',
  'English',
  'French',
]
const langSet = new Set(languages)
console.log(langSet) // Set(4) {"English", "Finnish", "French", "Spanish"}
console.log(langSet.size) // 4
const counts = []
const count = {}
for (const l of langSet) {
  const filteredLang = languages.filter((lng) => lng === l)
  console.log(filteredLang) // ["English", "English", "English"]
  counts.push({ lang: l, count: filteredLang.length })
}
console.log(counts)
[
  { lang: 'English', count: 3 },
  { lang: 'Finnish', count: 1 },
  { lang: 'French', count: 2 },
  { lang: 'Spanish', count: 1 },
]

Другой вариант использования set. Например, для подсчета уникальных элементов в массиве.

const numbers = [5, 3, 2, 5, 5, 9, 4, 5]
const setOfNumbers = new Set(numbers)
console.log(setOfNumbers)
Set(5) {5, 3, 2, 9, 4}

Союз наборов

Чтобы найти объединение двух множеств, можно использовать оператор распространения. Найдем объединение множества A и множества B (A U B)

let a = [1, 2, 3, 4, 5]
let b = [3, 4, 5, 6]
let c = [...a, ...b]
let A = new Set(a)
let B = new Set(b)
let C = new Set(c)
console.log(C)
Set(6) {1, 2, 3, 4, 5,6}

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

Найти пересечение двух множеств можно с помощью фильтра. Найдем пересечение множества A и множества B (A ∩ B)

let a = [1, 2, 3, 4, 5]
let b = [3, 4, 5, 6]
let A = new Set(a)
let B = new Set(b)
let c = a.filter((num) => B.has(num))
let C = new Set(c)
console.log(C)
Set(3) {3, 4, 5}

Отличие наборов

Найти разницу между двумя наборами можно с помощью фильтра. Найдем разность множества A и множества B (A \ B)

let a = [1, 2, 3, 4, 5]
let b = [3, 4, 5, 6]
let A = new Set(a)
let B = new Set(b)
let c = a.filter((num) => !B.has(num))
let C = new Set(c)
console.log(C)
Set(2) {1, 2}