在百度上做網(wǎng)站多少錢百度收錄提交
數(shù)據(jù)結(jié)構(gòu)Set
ES6
提供了新的數(shù)據(jù)結(jié)構(gòu)Set
。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復的值。
Set
本身是一個構(gòu)造函數(shù),用來生成Set
數(shù)據(jù)結(jié)構(gòu)。
// 數(shù)組去重
const set = new Set([1, 2, 3, 4, 4]);
[...set]
// [1, 2, 3, 4]
目前個人感覺Set
數(shù)據(jù)結(jié)構(gòu)最好用的用處還是數(shù)組去重,暫沒遇到其它好用的場景。
但數(shù)組去重只能去重基本類型的值,比如number
、string
、boolean
、null
、undefined
和BigInt
,不能去重引用類型,比如對象數(shù)組等。
數(shù)據(jù)結(jié)構(gòu)Map
JavaScript
的對象(Object)
,本質(zhì)上是鍵值對的集合(Hash
結(jié)構(gòu)),但是傳統(tǒng)上只能用字符串、整數(shù)(最終還是會轉(zhuǎn)成字符串)和Symbol類型當作鍵。這給它的使用帶來了很大的限制。
為了解決這個問題,ES6
提供了Map
數(shù)據(jù)結(jié)構(gòu)。它類似于對象,也是鍵值對的集合,但是“鍵”的范圍不限于字符串,各種類型的值(包括對象)都可以當作鍵。也就是說,Object
結(jié)構(gòu)提供了“字符串—值”的對應,Map
結(jié)構(gòu)提供了“值—值”的對應,是一種更完善的Hash
結(jié)構(gòu)實現(xiàn)。如果你需要“鍵值對”的數(shù)據(jù)結(jié)構(gòu),Map
比 Object
更合適。
最重要的一點是Map
會保留所有元素創(chuàng)建或添加時的順序,而Object
并不會保證屬性的順序(原因請戳這)。就例如:
const obj = { 5: 5, 4: 4, 3: 3 };
// { 3: 3, 4: 4, 5: 5 }
obj[2] = 2;
// { 2: 2, 3: 3, 4: 4, 5: 5 }
這有時會給我們開發(fā)帶來困擾,所以當我們對順序有要求時使用Map
數(shù)據(jù)結(jié)構(gòu)比較好。
const map = new Map([[5, 5], [4, 4], [3, 3]
]);
/*
0: {5 => 5}
1: {4 => 4}
2: {3 => 3}
*/
map.set(2, 2);
/*
0: {5 => 5}
1: {4 => 4}
2: {3 => 3}
3: {2 => 2}
*/