Создание собственного класса Set

Для простой реализации храните значения в массиве: add возвращает this, has проверяет наличие, delete возвращает признак удаления. Сравнение должно учитывать NaN.

Короткий ответ

Что ответить на собеседовании

Для простой реализации храните значения в массиве: add возвращает this, has проверяет наличие, delete возвращает признак удаления. Сравнение должно учитывать NaN.

Подробный разбор

Ответ с пояснениями

Условие

Реализуйте четыре метода класса Set, которые будут воспроизводить поведение стандартного набора.

class Set {
  constructor(initial) {}

  add(value) {}

  has(value) {}

  delete(value) {}
}

Ответ

Для простой реализации храните значения в массиве: add возвращает this, has проверяет наличие, delete возвращает признак удаления. Сравнение должно учитывать NaN.

class Set {
  #values = [];
  constructor(initial) {
    if (initial != null) for (const value of initial) this.add(value);
  }
  add(value) {
    if (!this.has(value)) this.#values.push(value === 0 ? 0 : value);
    return this;
  }
  has(value) { return this.#values.includes(value); }
  delete(value) {
    const index = this.#values.findIndex(item => item === value || (item !== item && value !== value));
    if (index < 0) return false;
    this.#values.splice(index, 1);
    return true;
  }
}

Объекты сравниваются по ссылке, NaN равен NaN, +0 и -0 объединяются. Операции линейные: это имитация указанных методов, не производительности и полного API встроенного Set.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее