JavaScript Set — множина унікальних значень
Set (у перекладі — множина) зберігає лише унікальні значення: додати те саме двічі неможливо.
Загальний опис
Найвідоміше застосування — прибрати дублікати з масиву. Те, що раніше писали циклом чи filter з indexOf, тепер робиться одним рядком: [...new Set(array)].
Але є й глибша причина брати Set: перевірка «чи є таке значення» через has() працює швидко незалежно від розміру, тоді як array.includes() перебирає масив із початку. На тисячах елементів різниця відчутна.
Унікальність визначається як у ===, з одним винятком: два NaN вважаються однаковими (у порівнянні NaN === NaN дає false, а Set їх зливає).
- Порада
-
автор: NagarD[...new Set(array)]— найкоротший спосіб отримати масив без дублікатів. Порядок при цьому зберігається. - Нотатка
-
Унікальність об'єктів — за посиланням, а не за вмістом. Два однакові на вигляд
автор: NagarD{a: 1}— це два різні об'єкти, іSetзбереже обидва.
Синтаксис
const set = new Set([1, 2, 3]);
методи
| Метод | Опис |
|---|---|
| add | Додає значення, якщо його ще немає. |
| has | Перевіряє наявність значення. |
| delete | Видаляє значення. |
| clear | Видаляє всі значення. |
| forEach | Виконує функцію для кожного значення. |
| values | Ітератор значень у порядку вставки. |
властивості
| Властивість | Опис |
|---|---|
| size | Кількість значень у колекції. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Set | 38+ | 13+ | 8+ | 25+ | 12+ | 11+ |
| Переглядач | ||||
|---|---|---|---|---|
| Set | 38+ | yes | yes | 8+ |
Приклади
+ запропонувати свій приклад у пісочниці
Дублікати геть, швидка перевірка входження, перетин множин.
const tags = ['css', 'js', 'css', 'html', 'js'];
const unique = [...new Set(tags)];
console.log(unique); // ['css', 'js', 'html']
const allowed = new Set(['css', 'js', 'html']);
// швидко навіть на тисячах елементів
console.log(allowed.has('css')); // true
allowed.add('svg');
allowed.delete('html');
console.log(allowed.size); // 3
// перетин двох множин
const a = new Set([1, 2, 3]);
const b = new Set([2, 3, 4]);
const common = [...a].filter(x => b.has(x)); // [2, 3]
Коментарі
Коментарів ще немає — будьте першим!