JavaScript Set — множина унікальних значень


Set (у перекладі — множина) зберігає лише унікальні значення: додати те саме двічі неможливо.

автор: NagarD

Загальний опис

Найвідоміше застосування — прибрати дублікати з масиву. Те, що раніше писали циклом чи filter з indexOf, тепер робиться одним рядком: [...new Set(array)].

Але є й глибша причина брати Set: перевірка «чи є таке значення» через has() працює швидко незалежно від розміру, тоді як array.includes() перебирає масив із початку. На тисячах елементів різниця відчутна.

Унікальність визначається як у ===, з одним винятком: два NaN вважаються однаковими (у порівнянні NaN === NaN дає false, а Set їх зливає).

автор: NagarD

Порада

[...new Set(array)] — найкоротший спосіб отримати масив без дублікатів. Порядок при цьому зберігається.

автор: NagarD
Нотатка

Унікальність об'єктів — за посиланням, а не за вмістом. Два однакові на вигляд {a: 1} — це два різні об'єкти, і Set збереже обидва.

автор: NagarD

Синтаксис

const set = new Set([1, 2, 3]);

методи

Метод Опис
add Додає значення, якщо його ще немає.
has Перевіряє наявність значення.
delete Видаляє значення.
clear Видаляє всі значення.
forEach Виконує функцію для кожного значення.
values Ітератор значень у порядку вставки.

властивості

Властивість Опис
size Кількість значень у колекції.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
Set 38+ 13+ 8+ 25+ 12+ 11+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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]
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід