Saya perlu menggunakan objek sebagai kunci untuk peta saya, jadi saya melanjutkan kelas peta yang merangkaikan objek yang diluluskan seperti yang ditunjukkan di bawah
class CoordMapper extends Map { set = (k: ISquareCoordinate, v: Array<ISquareCoordinate>) => { const stringifiedKey = JSON.stringify(k) return super.set(stringifiedKey,v) } get = (k: ISquareCoordinate) => { const stringifiedKey = JSON.stringify(k) return super.get(stringifiedKey) } }
Daripada apa yang saya faham keys(), values() dan entries() ialah kaedah penjana supaya saya boleh melakukan sesuatu yang serupa
* keys() { const keysArr = [...super.keys()] for (const key of keysArr){ yield JSON.parse(key) } }
Tetapi ini menyebabkan saya memuatkan semua kunci yang saya ingin elakkan, adakah cara yang lebih baik?
Sunting: Walaupun Peta mempunyai objek sebagai kunci, ia hanya menyemak objek dengan rujukan. Berikan contoh
let newMap = Map() const obj1 = {'a': 1, 'b' :2} newMap.set(obj1, 123) const copyObj1 = {...obj1} console.log(newMap.get(obj1)) //returns 123 console.log(newMap.get(copyObj1)) //returns undefined
Saya perlukan yang kedua console.log
Kembali ke 123
Sekiranya sesiapa tersandung di sini pada masa hadapan, terdapat cadangan Fasa 3 yang, jika diluluskan, akan menambah gula sintaksis kepada iterator supaya anda boleh melakukan perkara seperti:
Cuba ini (ini belum berfungsi lagi):
Tidak perlu mengumpul semua nilai induk ke dalam tatasusunan, sebaliknya lelaran terus ke atasnya:
Dengan cara ini, kemalasan iterator dikekalkan: pernyataan
next()
时,它都会在parentKeyIterator
上调用next()
一次,然后到达yield
dipanggil setiap kali pada iterator lanjutan, dan kemudian dijeda.