Объект ES6 Set
не имеет методов сравнения или настраиваемой расширяемости сравнения.
В .has()
, .add()
и .delete()
методы работы только от него быть таким же реальным объектом или же значением для примитивного и не имеют средств для подключения к или заменить только что логика.
Вы могли бы предположительно получить свой собственный объект из a Set
и replace .has()
, .add()
а .delete()
методы - с чем-то, что сначала делало глубокое сравнение объектов, чтобы выяснить, есть ли уже элемент в наборе, но производительность, вероятно, не будет хорошей, так как базовый Set
объект не поможет вообще. Вероятно, вам придется просто выполнить итерацию методом грубой силы по всем существующим объектам, чтобы найти соответствие, используя собственное сравнение, прежде чем вызывать оригинал .add()
.
Вот некоторая информация из этой статьи и обсуждение возможностей ES6:
5.2 Почему я не могу настроить, как карты и наборы сравнивают ключи и значения?
Вопрос: Было бы хорошо, если бы был способ настроить, какие ключи карты и какие элементы набора считаются равными. Почему там нет?
Ответ: Эта функция была отложена, поскольку ее трудно реализовать должным образом и эффективно. Один из вариантов - передать обратные вызовы коллекциям, которые определяют равенство.
Другой вариант, доступный в Java, - указать равенство с помощью метода, который реализует объект (equals () в Java). Однако такой подход проблематичен для изменчивых объектов: в общем случае, если объект изменяется, его «местоположение» внутри коллекции также должно меняться. Но это не то, что происходит в Java. Скорее всего, JavaScript пойдет по более безопасному пути - разрешить сравнение только по значению для специальных неизменяемых объектов (так называемых объектов значений). Сравнение по значению означает, что два значения считаются равными, если их содержимое одинаково. Примитивные значения сравниваются по значению в JavaScript.
===
оператор. Установленный объект ES6 не имеет методов сравнения..has()
Метод и.add()
методы работа только с нее быть тем же самым реальным объектом или же значением для примитивного.