У JavaScript об’єкт Set (множина) – це колекція унікальних значень будь-якого типу. Щоб створити новий порожній Set, можна використовувати наступний синтаксис:
let setObject = new Set();Конструктор Set також може приймати ітерований об’єкт (Iterable об’єкти у JavaScript), в такому разі всі елементи цього об’єкта (без дублікатів) будуть додані до нової множини:
let setObject = new Set(iterableObject);Основні методи Set
add(value) – додає до множини новий елемент із заданим значенням. Повертає поточний об’єкт Set, тому цей метод можна використовувати в ланцюжку з іншими методами Set.
clear() – видаляє всі елементи з об’єкту Set.
delete(value) – видаляє елемент зі значенням заданим у value.
entries() – повертає новий ітератор, котрий містить пари [value, value] для кожного елемента Set.
forEach(callback [, thisArg]) – викликає функцію зворотного виклику (callback) для кожного з елементів Set, у порядку їх додавання.
has(value) – повертає true, якщо елемент із заданим значенням є у Set, в іншому разі повертає false.
values() – повертає новий ітератор, який містить значення кожного з елементів об’єкту Set, у порядку їх додавання.
keys() – аналогічно методу values(), повертає ітаратор зі значеннями елементів Set.
Далі буде розглянуто деякі приклади роботи з Set у JavaScript.
Створення нового Set
Розглянемо приклад створення нового Set на основі масиву:
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
console.log(chars);
// Set(3) { 'a', 'b', 'c' }
console.log(typeof chars);
// object
console.log(chars instanceof Set);
// trueВсі значення елементів у Set є унікальними, відповідно дублікати елементів наявні у вхідному масиві, відсутні у створеному на його основі Set.
Розмір Set
Щоб отримати кількість елементів, які містить об’єкт Set, використовується його властивість size:
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
console.log(chars.size); // 3Додавання елементів до Set
Щоб додати елемент до Set, використовується метод add():
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
chars.add('d');
console.log(chars);
// Set(4) { 'a', 'b', 'c', 'd' }Оскільки метод add() повертає об’єкт Set, його можна використовувати в ланцюжку:
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
chars.add('d').add('e');
console.log(chars);
// Set(5) { 'a', 'b', 'c', 'd', 'e' }Перевірка наявності значення у Set
Перевірити, чи містить множина певний елемент, можна за допомогою методу has():
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
console.log(chars.has('a')); // true
console.log(chars.has('z')); // falseВидалення елементів з Set
Для видалення з Set елемента з заданим значенням, використовується метод delete():
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
let deleted = chars.delete('c');
console.log(deleted); // true
console.log(chars); // Set(2) { 'a', 'b' }Метод delete() повертає true, якщо елемент успішно видалено.
Для видалення всіх елементів з Set, використовується метод clear():
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
chars.clear();
console.log(chars);
// Set(0) {}Перебір елементів Set у JavaScript
Об’єкт Set зберігає порядок додавання своїх елементів, тому при ітерації над його елементами, їх послідовність буде такою самою, як і при додаванні. Приклад перебору елементів Set за допомогою циклу for...of:
let chars = new Set(['a', 'b']);
chars.add('b').add('c').add('d');
for (let char of chars) {
console.log(char);
}
/*
a
b
c
d
*/Set також має методи keys(), values() та entries() (так само як і Map). Однак ключі та значення у Set є ідентичними. Наприклад:
let chars = new Set(['a', 'a', 'b', 'c', 'c']);
for (let [key, value] of chars.entries()) {
console.log(key, value);
}
/*
a a
b b
c c
*/Виклик callback для кожного елемента Set
При потребі викликати функцію зворотного виклику для кожного елемента Set, можна використати метод forEach():
const names = ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Dave'];
const uniqueNames = new Set(names);
uniqueNames.forEach((name) => {
console.log(name.toUpperCase());
});
/*
ALICE
BOB
CHARLIE
DAVE
*/