Penjelasan terperinci tentang Set/WeakSet dalam kemahiran ECMAScript6_javascript

WBOY
Lepaskan: 2016-05-16 15:55:28
asal
1195 orang telah melayarinya

ES6 menambah Set pemusnah data baharu, yang, seperti Set Java, tidak menyimpan elemen pendua. Set dilaksanakan sebagai kelas dan perlu baharu sebelum digunakan.

var s1 = new Set()
s1.add(1)
s1.add(2)
s1.add(3)
s1.add(1)
 
var s2 = new Set()
s2.add('a')
s2.add('a')
 
// 输出1,2, 3
for (var i of s1 ) {
  console.log(i)
}
// 输出a
for (var i of s2 ) {
  console.log(i)
}
Salin selepas log masuk

Gunakan kaedah tambah Set untuk menambah elemen di atas tidak akan disimpan.

Pembina Set juga boleh menerima tatasusunan sebagai parameter

var s3 = new Set([1,2,3,1])
s3.size // 3
Salin selepas log masuk

Anda boleh lihat nombor 1 yang diulang masih tidak dimasukkan. Selain itu, untuk mendapatkan panjang Set, gunakan saiz, bukan panjang.

Perlu diambil perhatian bahawa untuk {} atau [], ia adalah dua objek yang sama

var s4 = new Set()
s4.add({})
s4.add({})
s4.size // 2

Salin selepas log masuk

1. Set Traverse (untuk)

var s1 = new Set()
s1.add(1)
s1.add(2)
s1.add(3)
 
// 输出1,2, 3
for (var i of s1) {
  console.log(i)
}

Salin selepas log masuk

2. Tukar Set kepada tatasusunan

var s1 = new Set()
s1.add(1)
s1.add(2)
 
// toArray
var a1 = Array.from(s1)
Array.isArray(a1) // true
 
// or
var a1 = [...new Set(s1)] 

Salin selepas log masuk

3. Gunakan Set untuk menyahduplikasi tatasusunan

function distinct(arr) {
  return Array.from(new Set(arr))
// return [...new Set(arr)]
}
Salin selepas log masuk

sebagai

Atribut Set

pembina
saiz
Tetapkan kaedah

has(val) menentukan sama ada unsur itu wujud
add(val) menambah elemen
delete(val) padam elemen
clear membuang semua elemen
kunci
nilai
penyertaan
untukSetiap merentasi elemen
peta
penapis

4. Set Lemah

WeakSet dan Set tidak menyimpan elemen pendua, tetapi terdapat beberapa perbezaan

1. Hanya simpan elemen jenis objek

ws = new WeakSet()
ws.add(1)
Salin selepas log masuk

Ralat yang dilaporkan di bawah FF adalah seperti berikut

2. Terdapat hanya tiga kaedah tambah/padam/kosongkan/telah, yang tidak boleh dilalui, dan tiada atribut saiz, dsb.

ws = new WeakSet()
ws.size // undefined
ws.forEach // undefined
Salin selepas log masuk

Penjelasan MDN

Nilai objek yang disimpan dalam objek WeakSet dirujuk dengan lemah Jika tiada pembolehubah atau atribut lain merujuk kepada nilai objek, nilai objek akan dikumpul Oleh sebab ini, objek WeakSet tidak boleh dikira. tiada cara untuk mendapatkan semua elemen yang terkandung di dalamnya

WeakSet digunakan terutamanya untuk menyimpan nod DOM Apabila nod ini dialih keluar daripada dokumen, ia tidak akan menyebabkan kebocoran memori.

Di atas adalah keseluruhan kandungan artikel ini, saya harap anda semua menyukainya.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan