Об'єкт ES6 Set
не має жодних методів порівняння або розширення спеціальної порівняльності.
І .has()
, .add()
і .delete()
методи працюють лише за те, що вони є тим самим фактичним об'єктом або тим самим значенням для примітиву і не мають засобів підключення або заміни саме цієї логіки.
Ви, мабуть, можете отримати власний об'єкт від a Set
і замінити .has()
, .add()
а також .delete()
методами з чимось, що спершу зробив глибоке порівняння об'єкта, щоб виявити, чи є елемент вже в Наборі, але ефективність, ймовірно, не буде хорошою, оскільки базовий Set
об'єкт не допоможе зовсім. Вам, мабуть, доведеться просто зробити грубу силу ітерації через усі існуючі об'єкти, щоб знайти збіг за допомогою власного користувацького порівняння перед тим, як викликати оригінал.add()
.
Ось деяка інформація з цієї статті та обговорення особливостей ES6:
5.2 Чому я не можу налаштувати, як карти та набори порівнюють ключі та значення?
Питання: Було б непогано, якби був спосіб налаштувати, які клавіші карти та які елементи набору вважаються рівними. Чому його немає?
Відповідь: Ця функція була відкладена, оскільки її важко правильно та ефективно реалізувати. Один із варіантів - передавати зворотні дзвінки колекціям, що визначають рівність.
Інший варіант, доступний на Java, - це визначити рівність методом, який об'єкт реалізує (equals () у Java). Однак такий підхід є проблематичним для змінних об'єктів: загалом, якщо об'єкт змінюється, його "розташування" всередині колекції також має змінюватися. Але це не те, що відбувається в Java. JavaScript, ймовірно, піде більш безпечним шляхом, лише дозволяючи порівнювати значення за спеціальними незмінними об'єктами (так звані об'єкти значення). Порівняння за значенням означає, що два значення вважаються рівними, якщо їх зміст є рівним. Примітивні значення порівнюються за значенням у JavaScript.
===
оператора. Об'єкт набору ES6 не має методів порівняння..has()
Метод і.add()
методи робота тільки з неї бути тим же самим реальним об'єктом або ж значенням для примітивного.