Menggunakan objek Array sebagai kunci dalam Peta ES6
P粉344355715
P粉344355715 2023-10-21 18:06:40
0
2
681

Saya cuba mengemas kini kod saya kepada ES6 kerana saya menggunakan Node 4.0 dan sangat menyukai cirinya setakat ini. Namun, saya rasa berbeza dengan ES6 baharu Map 数据结构有问题,因为当使用 Array 作为键时,它的行为与 {}. Saya menggunakannya sebagai peta kaunter.

Saya menjalankan kod ini dan saya ingin tahu cara menggunakan tatasusunan sebagai kunci untuk Map .

"use strict";

var a = new Map();
a.set(['x','y'], 1);
console.log(a.get(['x','y']));

var b = {};
b[['x','y']] = 1;

console.log(b[['x','y']]);

Ia mencetak perkara berikut, baris pertama hendaklah 1 而不是 undefined:

undefined
1

Peta JS asal menyelaraskan kekunci dan saya tidak mahu melakukan jenis penggodaman stringifikasi yang sama dengan ES6 baharu Map.

Bagaimanakah saya boleh menggunakan tatasusunan sebagai kunci dalam ES6 Map?

P粉344355715
P粉344355715

membalas semua(2)
P粉529245050

Anda perlu menyimpan rujukan kepada contoh bukan primitif Array digunakan sebagai kunci. Sila ambil perhatian perbezaan dalam dua contoh berikut:

"use strict";

var a = new Map();
a.set(['x','y'], 1);
console.log(a.get(['x','y']));
console.log(['x','y'] === ['x','y']);

var b = new Map();
var array = ['x','y'];
b.set(array, 1);
console.log(b.get(array));
console.log(array === array);
P粉978551081

Fahami cara kekunci Peta ES2015 membandingkan (hampir) seperti === 运算符一样。两个数组实例,即使它们包含相同的值,也不会以 === antara satu sama lain.

Cuba ini:

var a = new Map(), key = ['x', 'y'];
a.set(key, 1);
console.log(a.get(key));

Memandangkan kelas Map bertujuan untuk digunakan sebagai kelas asas, anda mungkin boleh menggunakan fungsi .get() overridden untuk melaksanakan subkelas.

("hampir" dalam ayat pertama menggambarkan bahawa perbandingan kesamaan utama Peta dilakukan melalui Object.is(), yang jarang berlaku dalam pengekodan harian. Pada asasnya, varian ketiga ujian kesaksamaan dalam JavaScript.)

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan