Весной стартует сезон найма, успей отхватить свой оффер!

Set, Map, WeakSet и WeakMap в JavaScript

JavaScript предоставляет встроенные структуры данных, которые делают работу с коллекциями более удобной и эффективной. Рассмотрим Set, Map, WeakSet и WeakMap.

Set

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

Особенности set

  • Хранит только уникальные значения.
  • Значения могут быть любого типа.
  • Неупорядоченная структура.

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

  • add(value) — добавляет значение.
  • delete(value) — удаляет значение.
  • has(value) — проверяет наличие значения.
  • clear() — очищает коллекцию.
  • size — возвращает количество элементов.

Пример использования set

const set = new Set();
set.add(1);
set.add(2);
set.add(2); // Игнорируется, так как 2 уже есть в коллекции
console.log(set.has(1)); // true
console.log(set.size);   // 2
set.delete(1);
console.log(set);        // Set { 2 }

Map

Map — это коллекция пар ключ-значение, где ключи могут быть любого типа.

Особенности map

  • Упорядоченная структура.
  • Позволяет использовать объекты в качестве ключей.

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

  • set(key, value) — добавляет пару ключ-значение.
  • get(key) — возвращает значение по ключу.
  • delete(key) — удаляет пару по ключу.
  • has(key) — проверяет наличие ключа.
  • clear() — очищает коллекцию.
  • size — возвращает количество элементов.

Пример использования map

const map = new Map();
map.set('name', 'Иван');
map.set({ id: 1 }, 'Объект');
console.log(map.get('name')); // Иван
console.log(map.size);        // 2
map.delete('name');
console.log(map);             // Map { { id: 1 } => 'Объект' }

WeakSet

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

Особенности weakset

  • Хранит только объекты.
  • Нельзя получить размер или перебрать элементы.
  • Используется для временного хранения объектов.

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

  • add(value) — добавляет объект.
  • delete(value) — удаляет объект.
  • has(value) — проверяет наличие объекта.

Пример использования weakset

const weakSet = new WeakSet();
let obj = { name: 'Иван' };
weakSet.add(obj);
console.log(weakSet.has(obj)); // true
obj = null; // Объект удалится из WeakSet сборщиком мусора

WeakMap

WeakMap — это коллекция пар ключ-значение, где ключами могут быть только объекты, а значения могут быть любыми. Ключи являются слабо-ссылаемыми, что позволяет сборщику мусора удалять объекты, если на них больше нет ссылок.

Особенности weakmap

  • Ключами могут быть только объекты.
  • Значения могут быть любыми.
  • Элементы слабо-ссылаемы, что означает автоматическое удаление из коллекции, если ключ недостижим.
  • Нельзя перебрать элементы коллекции или получить её размер.

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

  • set(key, value) — добавляет пару ключ-значение.
  • get(key) — возвращает значение по ключу.
  • delete(key) — удаляет пару ключ-значение.
  • has(key) — проверяет наличие ключа.

Пример использования weakmap

const weakMap = new WeakMap();

// Создаём объект
let user = { name: "Иван" };

// Добавляем объект как ключ и значение
weakMap.set(user, "Данные о пользователе");

console.log(weakMap.get(user)); // "Данные о пользователе"

// Удаляем ссылку на объект
user = null;

// Объект удалится из WeakMap сборщиком мусора

Ограничения WeakMap:

WeakMap подходит для хранения данных, связанных с объектами, которые могут быть удалены сборщиком мусора. Например, для привязки метаданных к объектам DOM.