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

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

1.2 Junior🔥 121 комментариев
#Node.js и JavaScript

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

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

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

Set — встроенный объект в JavaScript, который хранит коллекцию уникальных значений. Это один из фундаментальных типов данных, очень полезный для бэкенд-разработки на Node.js.

Основные характеристики

Set хранит только уникальные значения. Если попытаться добавить дубликат, он не будет добавлен.

const set = new Set();
set.add(1);
set.add(1);
set.add(2);
set.add('hello');

console.log(set.size); // 3 (не 4!)
console.log(set); // Set(3) { 1, 2, 'hello' }

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

add(value) — добавляет значение в Set has(value) — проверяет наличие значения delete(value) — удаляет значение clear() — очищает весь Set size — свойство, возвращает количество элементов

const users = new Set();

users.add('alice');
users.add('bob');
users.add('alice'); // дубликат, не добавится

console.log(users.has('alice')); // true
console.log(users.size); // 2

users.delete('bob');
console.log(users.size); // 1

Итерация по Set

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

// for...of
for (const color of colors) {
  console.log(color);
}

// forEach
colors.forEach(color => {
  console.log(color);
});

// Перевести в массив
const colorArray = Array.from(colors);
const colorArray2 = [...colors];

Реальные примеры в Node.js

1. Удаление дубликатов из массива:

const numbers = [1, 2, 2, 3, 3, 4, 4, 5];
const unique = [...new Set(numbers)];
console.log(unique); // [1, 2, 3, 4, 5]

2. Отслеживание активных соединений:

const activeConnections = new Set();

function addConnection(userId) {
  activeConnections.add(userId);
  console.log(`Active connections: ${activeConnections.size}`);
}

function removeConnection(userId) {
  activeConnections.delete(userId);
}

addConnection('user1');
addConnection('user2');
addConnection('user1'); // не добавится
console.log(activeConnections.size); // 2

3. Отслеживание посещённых страниц:

const visitedPages = new Set();

visitedPages.add('/home');
visitedPages.add('/products');
visitedPages.add('/home'); // не добавится

if (visitedPages.has('/products')) {
  console.log('User visited products page');
}

4. Кэширование результатов:

const processedIds = new Set();

async function processUser(userId) {
  if (processedIds.has(userId)) {
    console.log('Already processed');
    return;
  }
  
  // Обработка
  processedIds.add(userId);
}

Set vs Array vs Object

Сравнение для проверки наличия элемента:

// Array — O(n), медленно
const arr = [1, 2, 3, 4, 5];
arr.includes(3); // O(n)

// Set — O(1), очень быстро
const set = new Set([1, 2, 3, 4, 5]);
set.has(3); // O(1)

// Object — O(1), но только для строковых ключей
const obj = { '1': true, '2': true, '3': true };
'1' in obj; // O(1)

При больших объёмах данных Set значительно быстрее:

const arr = Array.from({length: 100000}, (_, i) => i);
const set = new Set(arr);

console.time('Array includes');
for (let i = 0; i < 1000; i++) {
  arr.includes(50000);
}
console.timeEnd('Array includes'); // ~50ms

console.time('Set has');
for (let i = 0; i < 1000; i++) {
  set.has(50000);
}
console.timeEnd('Set has'); // ~0.1ms

WeakSet

Для хранения объектов используют WeakSet — он удаляет элементы когда на них нет ссылок (для garbage collection).

const weakSet = new WeakSet();

let user1 = { name: 'Alice' };
let user2 = { name: 'Bob' };

weakSet.add(user1);
weakSet.add(user2);

user1 = null; // объект может быть удален из памяти

Когда использовать Set

  • Уникальные значения (удаление дубликатов)
  • Проверка наличия элемента (has быстрее чем includes)
  • Отслеживание активных сессий/соединений
  • Кэширование и мемоизация
  • Набор тегов или категорий
  • Любые операции с уникальными данными

Set — это мощный инструмент для эффективного управления коллекциями в JavaScript. Используй его когда нужны уникальные значения и быстрая проверка наличия элемента.

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