Set.prototype.has() с предикатом
var myset = new Set();
myset.add({ key: 123, value: 100 });
var has = myset.has({ key: 123, value: 100 });
console.log(has); // false
var obj = {
key: 456,
value: 200
};
myset.add(obj);
has = myset.has(obj);
console.log(has); // true
has = myset.has(x => x.key === 123);
console.log(has); // false
Проблема в данном случае: Я просто добавить { key: 123, value: 100 }
к myset
, почему она не содержит { key: 123, value: 100 }
?
Другой случай, если я использую obj
вместо { key: 123, value: 100 }
, он вернет true
.
Set.prototype.has() говорит:
Метод имеет() возвращает логическое значение, указывающее, существует ли элемент с указанным значением в объекте Set или нет.
Но это не говорит о том, что такое specified value
?
Очевидно, что в этом случае { key: 123, value: 100 }
и { key: 123, value: 100 }
похожи на, и .... Я получаю false
. Итак, что здесь specified
?
И второй вопрос: почему они не поддерживают predicate
в has()
методе?
В моем примере. Это труднее найти, если я использую for...of...
:
for (let obj of myset) {
if (obj.key === 123) return true;
}
Хотя это может быть рядный с утверждающий:
has = myset.has(x => x.key === 123)
Таким образом, она должна быть улучшена для будущего?
https://esdiscuss.org/topic/maps-with-object-keys да, извините. Карты JS нарушены для практических случаев использования, и человек, который сказал, что он их исправит, не собирается. Он не поддерживает предикаты или структурное равенство, потому что работа на языке - это неблагодарная работа, требующая тысяч часов, и большинство людей не хотят ее вставлять. –
@BenjaminGruenbaum ya. Благодаря! Я жду ECMAScript 2018 :) –