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ī)制