Rumah >hujung hadapan web >tutorial js >Penjelasan terperinci tentang Set/WeakSet dalam kemahiran ECMAScript6_javascript

Penjelasan terperinci tentang Set/WeakSet dalam kemahiran ECMAScript6_javascript

WBOY
WBOYasal
2016-05-16 15:55:281215semak imbas

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)
}

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

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

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)
}

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)] 

3. Gunakan Set untuk menyahduplikasi tatasusunan

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

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)

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

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.

Kenyataan:
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