set&&Map數(shù)據(jù)結(jié)構(gòu)

1.ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。跟java一樣的定義的數(shù)據(jù)結(jié)構(gòu)

const set = new Set();
[1,3,4,5,55,4,4,3,4,5].forEach((value)=>{
  set.add(value)
})
for(let v of set){
  console.log(v)
}
//1 3 4 5 55

接受數(shù)組初始化

const set = new Set([1,2,3,4,3,3,4,5,5,55,3]);
console.log([...set])// [1, 2, 3, 4, 5, 55]

Set 實(shí)例的屬性和方法
Set 結(jié)構(gòu)的實(shí)例有以下屬性。

Set.prototype.constructor:構(gòu)造函數(shù),默認(rèn)就是Set函數(shù)。
Set.prototype.size:返回Set實(shí)例的成員總數(shù)。
Set 實(shí)例的方法分為兩大類:操作方法(用于操作數(shù)據(jù))和遍歷方法(用于遍歷成員)。下面先介紹四個(gè)操作方法。

add(value):添加某個(gè)值,返回Set結(jié)構(gòu)本身。
delete(value):刪除某個(gè)值,返回一個(gè)布爾值,表示刪除是否成功。
has(value):返回一個(gè)布爾值,表示該值是否為Set的成員。
clear():清除所有成員,沒有返回值。

const set = new Set([1,2,3,4,3,3,4,5,5,55,3]);
console.log(set.delete(1));
console.log([...set]);//[2,3,4,5,55]
console.log(set.has(2)) ;//true
set.clear();
console.log([...set])//[]

Array.from方法可以將 Set 結(jié)構(gòu)轉(zhuǎn)為數(shù)組。

const set = new Set([1,2,3,4,3,3,4,5,5,55,3]);
const array = Array.from(set)
console.log(array)

WeakSet :
WeakSet 結(jié)構(gòu)與 Set 類似,也是不重復(fù)的值的集合。但是,它與 Set 有兩個(gè)區(qū)別。
首先,WeakSet 的成員只能是對(duì)象,而不能是其他類型的值。其次,WeakSet 中的對(duì)象都是弱引用,即垃圾回收機(jī)制不考慮 WeakSet 對(duì)該對(duì)象的引用,也就是說,如果其他對(duì)象都不再引用該對(duì)象,那么垃圾回收機(jī)制會(huì)自動(dòng)回收該對(duì)象所占用的內(nèi)存,不考慮該對(duì)象還存在于 WeakSet 之中。
WeakSet.prototype.add(value):向 WeakSet 實(shí)例添加一個(gè)新成員。
WeakSet.prototype.delete(value):清除 WeakSet 實(shí)例的指定成員。
WeakSet.prototype.has(value):返回一個(gè)布爾值,表示某個(gè)值是否在 WeakSet 實(shí)例之中。
WeakSet 不能遍歷,是因?yàn)槌蓡T都是弱引用,隨時(shí)可能消失,遍歷機(jī)制無法保證成員的存在,很可能剛剛遍歷結(jié)束,成員就取不到了

Map,比Object更合適的鍵值對(duì)數(shù)據(jù)結(jié)構(gòu)

let map = new Map()
  .set('a', '1')
  .set('b', '2b')
  .set('c', '3');
 
console.log([...map.keys()])
console.log([...map.values()]) 
console.log(map.has('a'))
map.delete('a');
console.log(map.get('a'))
for(let value of map.values())
  console.log(value)
for(let item of map.entries()){
  console.log(item[0]+":"+item[1])
}
map.clear();
console.log([...map])

WeakMap結(jié)構(gòu)與Map結(jié)構(gòu)類似,也是用于生成鍵值對(duì)的集合。首先,WeakMap只接受對(duì)象作為鍵名(null除外),不接受其他類型的值作為鍵名。其次,WeakMap的鍵名所指向的對(duì)象,不計(jì)入垃圾回收機(jī)制

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容