set
ES6 提供了新的數(shù)據(jù)結(jié)構(gòu) Set萍肆。它類似于數(shù)組,但是成員的值都是唯一的胀屿,沒有重復(fù)的值匾鸥。
Set 本身是一個構(gòu)造函數(shù),用來生成 Set 數(shù)據(jù)結(jié)構(gòu)碉纳。
//例
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i); //2,3,5,4
}
//Set 函數(shù)可以接受一個數(shù)組(或類似數(shù)組的對象)作為參數(shù)勿负,用來初始化。
const set = new Set([1, 2, 3, 4, 4]);
同時還可以利用set沒有重復(fù)的值這一特性, 實現(xiàn)數(shù)組去重.
var arr = [1,1,2,2,3,3];
var s = new Set(arr);
s.size;//3
console.log([...s]);//1,2,3;
//Array.form方法可以將 Set 結(jié)構(gòu)轉(zhuǎn)為數(shù)組劳曹。
const items = new Set([1, 2, 3, 4, 5]);
const arr = Array.from(items);
//另一種數(shù)array組去重的方法
function dedupe(array) {
return Array.from(new Set(array));
}
dedupe([1, 1, 2, 3])
Set 結(jié)構(gòu)的實例有以下屬性奴愉。
- Set.prototype.constructor:構(gòu)造函數(shù),默認(rèn)就是Set函數(shù)铁孵。
- Set.prototype.size:返回Set實例的成員總數(shù)锭硼。
四個操作方法。
- add(value):添加某個值蜕劝,返回Set結(jié)構(gòu)本身檀头。
- delete(value):刪除某個值,返回一個布爾值岖沛,表示刪除是否成功暑始。
- has(value):返回一個布爾值,表示該值是否為Set的成員婴削。
- clear():清除所有成員廊镜,沒有返回值。
Set的遍歷
Set 結(jié)構(gòu)的實例有四個遍歷方法唉俗,可以用于遍歷成員嗤朴。
- keys():返回鍵名的遍歷器
- values():返回鍵值的遍歷器
- entries():返回鍵值對的遍歷器
- forEach():使用回調(diào)函數(shù)遍歷每個成員
由于 Set 結(jié)構(gòu)沒有鍵名配椭,只有鍵值(或者說鍵名和鍵值是同一個值),所以keys方法和values方法的行為完全一致雹姊。
Set結(jié)構(gòu)的實例的forEach方法股缸,用于對每個成員執(zhí)行某種操作,沒有返回值吱雏。
Map
JavaScript 的對象(Object)敦姻,本質(zhì)上是鍵值對的集合(Hash 結(jié)構(gòu)),但是傳統(tǒng)上只能用字符串當(dāng)作鍵坎背。這給它的使用帶來了很大的限制替劈。
為了解決這個問題,ES6 提供了 Map 數(shù)據(jù)結(jié)構(gòu)得滤。它類似于對象陨献,也是鍵值對的集合,但是“鍵”的范圍不限于字符串懂更,各種類型的值(包括對象)都可以當(dāng)作鍵眨业。也就是說,Object 結(jié)構(gòu)提供了“字符串—值”的對應(yīng)沮协,Map結(jié)構(gòu)提供了“值—值”的對應(yīng)龄捡,是一種更完善的 Hash 結(jié)構(gòu)實現(xiàn)。如果你需要“鍵值對”的數(shù)據(jù)結(jié)構(gòu)慷暂,Map 比 Object 更合適
//例
var m = new Map([[{a:1}, 1], ["aa", 2]]);
console.log(m);
Map初始化方法
//Set和Map都可以用來生成新的 Map聘殖。
const set = new Set([
['foo', 1],
['bar', 2]
]);
const m1 = new Map(set);//set形式
const m2 = new Map([['baz', 3]]);//二維數(shù)組形式
const m3 = new Map(m2);//map形式
// 如果對同一個鍵多次賦值,后面的值將覆蓋前面的值行瑞。
const map = new Map();
map
.set(1, 'aaa')
.set(1, 'bbb');
console.log(map);//1=>bbb
Map屬性和操作方法
Map 結(jié)構(gòu)的實例有以下屬性和操作方法奸腺。
屬性/方法 | 作用 |
---|---|
size屬性 | size屬性返回 Map 結(jié)構(gòu)的成員總數(shù)。 |
set(key, value) | set方法設(shè)置鍵名key對應(yīng)的鍵值為value血久,然后返回整個 Map 結(jié)構(gòu)突照。如果key已經(jīng)有值,則鍵值會被更新氧吐,否則就新生成該鍵讹蘑。set方法返回的是當(dāng)前的Map對象,因此可以采用鏈?zhǔn)綄懛ā?/td> |
get(key) | get方法讀取key對應(yīng)的鍵值筑舅,如果找不到key座慰,返回undefined。 |
has(key) | has方法返回一個布爾值豁翎,表示某個鍵是否在當(dāng)前 Map 對象之中角骤。 |
delete(key) | delete方法刪除某個鍵,返回true心剥。如果刪除失敗邦尊,返回false。 |
clear() | clear方法清除所有成員优烧,沒有返回值蝉揍。 |
Map遍歷方法
遍歷方法
Map 結(jié)構(gòu)原生提供三個遍歷器生成函數(shù)和一個遍歷方法。
- keys():返回鍵名的遍歷器畦娄。
- values():返回鍵值的遍歷器又沾。
- entries():返回所有成員的遍歷器。
- forEach():遍歷 Map 的所有成員熙卡。