Что используешь для хранения коллекций в JavaScript?

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

Ответ

В JavaScript (и, соответственно, в Node.js) для хранения коллекций данных доступны несколько структур. Выбор зависит от конкретной задачи:

  1. Массивы (Array) — для упорядоченных списков.

    const tasks = ['Рефакторинг', 'Написать тесты'];
    tasks.push('Деплой');
  2. Объекты (Object) — для коллекций пар ключ-значение, где ключ — строка или символ. Идеально для структурированных данных.

    const config = {
      port: 3000,
      host: 'localhost',
      logging: true
    };
  3. Map — для коллекций, где ключом может быть любой тип (объект, функция). Сохраняет порядок вставки.

    const userMetadata = new Map();
    const user = { id: 123 };
    userMetadata.set(user, { lastLogin: new Date() });
  4. Set — для хранения уникальных значений любого типа.

    const uniqueTags = new Set();
    uniqueTags.add('nodejs');
    uniqueTags.add('javascript');
    uniqueTags.add('nodejs'); // Не добавится, дубликат
  5. WeakMap и WeakSet — аналоги Map и Set, но с "слабыми" ссылками на ключи (объекты). Это позволяет сборщику мусора удалять объекты-ключи, если на них нет других ссылок. Полезны для приватного хранения метаданных или кэширования без утечек памяти.

    const privateData = new WeakMap();
    class User {
      constructor(name) {
        privateData.set(this, { secretToken: crypto.randomBytes(16) });
      }
      getToken() {
        return privateData.get(this).secretToken;
      }
    }

В Node.js для работы с большими данными также часто используют буферы (Buffer) или TypedArray, но это уже не коллекции в классическом понимании.