ES6 (Harmony) では、新しい Set オブジェクトにその要素の参照等価性が導入されています。ただし、この動作は、オブジェクトを深く比較する場合には必ずしも適しているとは限りません。
次のコード スニペットを検討してください:
var set = new Set(); set.add({a:1}); set.add({a:1}); console.log([...set.values()]); // Array [ Object, Object ]
可能な限り参照してください。両方のオブジェクトが同じプロパティと値を持っている場合でも、参照の等価性により、これらは別のものとみなされます。
残念ながら、ES6 Set オブジェクトはビルドされた機能を提供しません。等価比較をカスタマイズするための -in メソッド。これを拡張して比較ロジックをオーバーライドすることも困難です。
Set オブジェクトのカスタム比較は直接サポートされていませんが、代替のデータ構造または手法の使用を検討できます。
1.不変値オブジェクト:
応答で言及されている記事では、Set で詳細な値の比較を使用できるようにする不変値オブジェクトの使用を提案しています。ただし、これは現在 JavaScript の標準ではありません。
2.詳細な比較を行うカスタム データ構造:
Set を継承し、オブジェクト ID を使用するメソッドをオーバーライドする独自のカスタム データ構造を作成できます。ただし、これには Set 実装を完全に書き直す必要があり、大規模なセットの場合は効率的ではありません。
以上がJavaScript Set オブジェクト内の要素の詳細な等価比較を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。