Objek ES6 Set yang diperkenalkan baru-baru ini menggunakan algoritma identiti untuk perbandingan kesamaan, serupa dengan pengendali. Pendekatan ini tidak sesuai untuk membandingkan objek, seperti yang ditunjukkan dalam contoh berikut:
var set = new Set(); set.add({a:1}); set.add({a:1}); console.log([...set.values()]); // Array [ Object, Object ]
Dua objek dengan sifat yang sama dianggap sebagai elemen yang berbeza dalam Set kerana ia bukan objek tepat yang sama. Had ini menimbulkan persoalan tentang cara menyesuaikan kesamaan untuk objek Set untuk memudahkan perbandingan objek dalam.
Had Semasa dan Penyelesaian Cadangan
Setakat ini, objek Set ES6 tidak mempunyai kaedah terbina dalam untuk menyesuaikan perbandingan kesaksamaan. Untuk menangani perkara ini, pengarang mencadangkan mencipta objek terbitan yang mewarisi daripada Set dan mengatasi kaedah .has(), .add(), dan .delete() untuk melakukan perbandingan objek dalam. Walau bagaimanapun, pendekatan ini tidak cekap kerana ia tidak menggunakan kefungsian objek Set yang mendasari.
Artikel ini merujuk cadangan dalam pembangunan yang bertujuan untuk memperkenalkan Records dan Tuples ke dalam JavaScript. Struktur data tidak berubah ini dijangka melaksanakan perbandingan nilai mendalam, yang akan menyelesaikan masalah yang diterangkan dengan berkesan. Walau bagaimanapun, cadangan ini masih dalam pembangunan dan belum dilaksanakan sepenuhnya.
Pertimbangan Lain
Beberapa strategi alternatif untuk perbandingan objek dalam Set termasuk:
Ini pendekatan menyediakan penyelesaian tetapi tidak menyesuaikan tingkah laku kesamaan objek Tetapkan secara langsung.
Atas ialah kandungan terperinci Bagaimana untuk Menyesuaikan Kesaksamaan untuk Objek Set JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!