Для простой реализации храните значения в массиве: add возвращает this, has проверяет наличие, delete возвращает признак удаления. Сравнение должно учитывать NaN.
Создание собственного класса Set
Для простой реализации храните значения в массиве: 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.