← Назад к вопросам

Что такое Set в JavaScript?

1.8 Middle🔥 191 комментариев
#Soft skills и карьера

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Set в JavaScript?

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

Ключевые характеристики Set

  • Уникальность значений: Все значения в Set должны быть уникальными. Попытка добавить дубликат игнорируется.
  • Порядок элементов: Set сохраняет порядок вставки элементов. При итерации элементы возвращаются в том порядке, в котором они были добавлены.
  • Ключ = Значение: В отличие от объектов Map, где есть ключи и значения, в Set каждое значение одновременно является и ключом, и значением.
  • Сравнение значений: Уникальность определяется с использованием алгоритма "SameValueZero" (аналогично строгому равенству ===, но с учётом того, что NaN равно NaN).

Создание и базовые операции

// Создание нового Set
const mySet = new Set();

// Инициализация с массивом (дубликаты будут удалены)
const initializedSet = new Set([1, 2, 3, 2, 1, 'hello']);
console.log(initializedSet); // Set(4) { 1, 2, 3, 'hello' }

Основные методы

const fruits = new Set();

// 1. Добавление элемента - add()
fruits.add('apple');
fruits.add('banana');
fruits.add('apple'); // Дубликат, не будет добавлен

// 2. Проверка наличия элемента - has()
console.log(fruits.has('banana')); // true
console.log(fruits.has('grape')); // false

// 3. Удаление элемента - delete()
fruits.delete('apple');
console.log(fruits); // Set(1) { 'banana' }

// 4. Получение количества элементов - size
console.log(fruits.size); // 1

// 5. Очистка всего Set - clear()
fruits.clear();
console.log(fruits.size); // 0

Итерация по Set

Set является итерируемым объектом и поддерживает несколько способов перебора:

const colors = new Set(['red', 'green', 'blue']);

// 1. Через for...of
for (const color of colors) {
    console.log(color);
}

// 2. С использованием метода forEach()
colors.forEach((value) => {
    console.log(value);
});

// 3. Получение итератора
const iterator = colors.values();
console.log(iterator.next().value); // 'red'

// 4. Преобразование в массив
const colorsArray = Array.from(colors);
// или используя spread оператор
const colorsArray2 = [...colors];

Преимущества использования Set

  • Эффективное удаление дубликатов из массивов:

    const arrayWithDuplicates = [1, 2, 2, 3, 4, 4, 5];
    const uniqueArray = [...new Set(arrayWithDuplicates)];
    console.log(uniqueArray); // [1, 2, 3, 4, 5]
    
  • Быстрая проверка наличия элемента: Метод has() работает в среднем за O(1), что значительно быстрее поиска в массиве методом includes() (O(n)).

  • Гарантированная уникальность данных в коллекции без необходимости ручной проверки.

  • Удобная работа с примитивами и объектами: В Set можно хранить как примитивные значения, так и ссылки на объекты (уникальность объектов определяется по ссылке).

WeakSet: специальная разновидность

Для работы исключительно с объектами существует WeakSet, который имеет следующие особенности:

  • Хранит только объекты (не примитивы)
  • Не предотвращает сборку мусора: если объект удаляется из памяти, он автоматически удаляется из WeakSet
  • Не является итерируемым
  • Не имеет свойства size

Практическое применение в тестировании

При тестировании Set может быть полезен для:

  1. Валидации уникальности данных (например, проверка, что в списке пользователей нет дублей ID)
  2. Сравнения коллекций на наличие общих/уникальных элементов
  3. Оптимизации проверок наличия элемента в больших наборах данных
  4. Очистки тестовых данных от дубликатов перед анализом

Set является важной частью современного JavaScript и предоставляет эффективные средства для работы с уникальными коллекциями данных, что особенно ценно при обработке больших объёмов информации в веб-приложениях.

Что такое Set в JavaScript? | PrepBro