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

«Что такое Set в JavaScript?» — вопрос из категории JavaScript, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые особенности:

  • Порядок элементов соответствует порядку добавления.
  • Нет индексов, доступ через методы: add(), has(), delete(), clear().
  • Итерируем с помощью for...of или методов forEach(), keys(), values(), entries().

Пример использования в Node.js:

const uniqueTags = new Set();
uniqueTags.add('nodejs');
uniqueTags.add('javascript');
uniqueTags.add('nodejs'); // Не добавится, дубликат

console.log(uniqueTags.size); // 2
console.log(uniqueTags.has('javascript')); // true

// Удаление дубликатов из массива — частая практика
const duplicateIds = [101, 102, 101, 103, 102];
const uniqueIds = [...new Set(duplicateIds)];
console.log(uniqueIds); // [101, 102, 103]

// Использование в контексте валидации
function validateUniqueEmails(emails) {
  const emailSet = new Set(emails);
  if (emailSet.size !== emails.length) {
    throw new Error('Обнаружены дублирующиеся email-адреса');
  }
  return Array.from(emailSet);
}

Почему это важно: Set обеспечивает алгоритмическую сложность O(1) для операций добавления, удаления и проверки наличия, что делает его значительно эффективнее аналогичных операций с массивом (includes() имеет O(n)).