最近看一些別人的代碼時(shí)候發(fā)現(xiàn)在那些代碼中經(jīng)常會(huì)出現(xiàn)Map和Set等,有丶優(yōu)雅,比我這個(gè)只會(huì)for的萌新不知道高到那里去了燕偶,所以決定學(xué)習(xí)一下ES6的Set和Map侵浸。
Set(集合)
ES新增的數(shù)據(jù)結(jié)構(gòu)set和數(shù)組類似旺韭,但不是數(shù)組,本質(zhì)上是一個(gè)集合掏觉。set數(shù)據(jù)結(jié)構(gòu)有一個(gè)特點(diǎn):
set存儲(chǔ)的成員是唯一的
因?yàn)閟et只是存儲(chǔ)的值(value)而沒(méi)有鍵(key)区端,所以它里邊的成員不能有重復(fù)。
JavaScript中的Set()是一個(gè)構(gòu)造函數(shù)澳腹,用來(lái)生成set數(shù)據(jù)結(jié)構(gòu)珊燎。
let s = new Set()
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1].forEach(x => s.add(x))
for (let i of s) {
console.log(i)
} // 1, 2, 3, 4, 5
上面例子展示了如何向set中添加成員,并且說(shuō)明了set不會(huì)添加重復(fù)的成員遵湖。
Set()也可以接受數(shù)組作為參數(shù)
let s = new Set([1,2,3,4,5,5,4,3,2,1])
console.log(s) // Set(5) {1,2,3,4,5}
和上面的效果是一樣的
同時(shí)Set()構(gòu)造函數(shù)還可以接受迭代器作為參數(shù)
let a=[1,2,3,4,4]
let iter=a[Symbol.iterator]();
let s=new Set(iter)
console.log(s) // Set(4) {1,2,3,4}
除了存放數(shù)字悔政,字符串之外,set也可以像數(shù)組一樣存放對(duì)象
let a = {
name: 'jack'
}
let b = {
name: 'rose'
}
let s = new Set()
s.add(a)
s.add(b)
console.log(s)
結(jié)果如下:
image.png
看到這里延旧,是不是想起了什么谋国?沒(méi)錯(cuò),就是數(shù)組去重
其實(shí)Set不光有add這一個(gè)方法迁沫,我們可以通過(guò)prototype來(lái)查看其它方法芦瘾。輸入console.log(Set.prototype)
結(jié)果如下:
image.png
`