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
この場合の問題点:私はちょうどmyset
から{ key: 123, value: 100 }
を追加し、なぜそれが{ key: 123, value: 100 }
が含まれていませんか?
{ key: 123, value: 100 }
の代わりにobj
を使用すると、true
が返されます。
ザ有する()メソッドは、指定された値を持つ要素が設定オブジェクトに存在するか否かを示すブール値を返します。
しかし、それについては言及していません:specified value
は何ですか?
明らかに、この場合{ key: 123, value: 100 }
と{ key: 123, value: 100 }
は、と同様です。私はfalse
を取得しています。ではspecified
は何ですか?
もう1つ質問:has()
の方法でpredicate
をサポートしていないのはなぜですか?
私の例では、それは叙述でインラインになることができますが
for (let obj of myset) {
if (obj.key === 123) return true;
}
:
はhas = myset.has(x => x.key === 123)
だから、それは将来のために改善すべきそれは私がfor...of...
を使用する場合、検索するのは難しいのか?
https://esdiscuss.org/topic/maps-with-object-keys申し訳ありません、うん。実際のユースケースではJSの地図が壊れていて、その地図を修正すると言った人はいないだろう。述語や構造的平等はサポートされていません。なぜなら、言語を使って作業することは何千時間も必要な恩知らずの仕事であり、ほとんどの人はそれを入れる意思がないからです。 –
@BenjaminGruenbaum ya。ありがとう!私はECMAScript 2018を待っています:) –