Set是無重覆值的有序列表。Set會自動移除重覆的值,因此你可以使用它來過濾數組中重覆的值並返回結果。 Map是有序的鍵值對,其中的鍵允許是任何類型。 Set和Map是es6新增的兩個數據集合。 Set集合 es6新增了set類型,這是一種無重覆值的有序列表。Set允許對它包含的數據進行快速訪問。 ...
Set是無重覆值的有序列表。Set會自動移除重覆的值,因此你可以使用它來過濾數組中重覆的值並返回結果。
Map是有序的鍵值對,其中的鍵允許是任何類型。
Set和Map是es6新增的兩個數據集合。
Set集合
es6新增了set類型,這是一種無重覆值的有序列表。Set允許對它包含的數據進行快速訪問。
創建Set並添加項目
Set通過new Set()來創建,調用add()方法就可以向Set中添加項目。檢查size屬性還能查看其中包含多少項。
let set = new Set();
set.add(5);
set.add("5");
console.log(set.size);//2
Set不會使用強制類型轉換來判斷值是否重覆。還可以向Set添加多個對象,他們不會被合併為同一項。
let set = new Set();
let key1 = {};
let key2 = {};
set.add(key1);
set.add(key2);
console.log(set.size);//2
如果add()方法用相同的值進行了多次調用,那麼在第一次之後的調用實際上會被忽略。
let set = new Set();
set.add(5);
set.add("5");
set.add(5);//被忽略
console.log(set.size);//2
你可以使用數組來初始化一個Set,並且Set構造器確保不會重覆使用這些值。
let set = new Set([1,2,3,4,5,2,6,5,5,5]);
console.log(set.size);//6
雖然數值5在數組中出現了四次,但是Set中只有一個5
你可以使用has()方法來測試某個值是否存在於set中
let set = new Set();
let key1 = {};
let key2 = {};
let key3 = {};
set.add(key1);
set.add(key2);
console.log(set.has(key1));//true
console.log(set.has(key3));//false
移除值
使用delete()方法來移除單個值或者調用clear()方法將所有值從Set中移除。
let set = new Set([1, 2, 3, 4, 5, 2, 6, 5, 5, "5"]);
console.log(set);
set.delete(5);
console.log(set.has(5));//false
set.clear();
console.log(set.size);//0
Set 上的forEach()方法
forEach()方法還會被傳遞一個回調函數,該回調函數接收三個參數:
- Set中下個位置的值
- 與第一個參數相同的值
- 目標Set本身
由於Set沒有鍵,為了使forEach方法與數組和map的forEach方法一致:將Set中的每一項同時認定為鍵與值。
let set = new Set([1, 2]);
set.forEach(function(value, key, ownerSet) {
console.log(`${key} ${value}`)
console.log(ownerSet === set);
})
將Set轉換為數組
let arr = [1,2,4,3,2,5,5];
let set = new Set(arr);
let arr1 = [...set];
console.log(arr1);
Map集合
ES6的Map類型是鍵值對的有序列表,而鍵和值都可以是任意類型。鍵的比較使用的是Object.is(),因此你可以將5與“5”同時作為鍵,因為他們類型不同。
可以調用set方法並傳遞一個鍵與一個關聯的值,來給Map添加項;此後使用鍵名來調用get()方法便能提取對應的值。
let map = new Map();
map.set("name", "cc");
map.set("age", 23);
console.log(map.get("name"));//cc
console.log(map.get("age"));//23
也可以使用對象作為鍵
let map = new Map();
let key1 = {};
let key2 = {};
map.set(key1, 5);
map.set(key2, 8);
console.log(map.get(key1));//5
console.log(map.get(key2));//8
Map的方法和屬性
- has(key)
- delete(key)
- clear()
- size
Map的初始化
你能將數組傳遞給Map構造器,以便使用數據來初始化一個Map。該數組中的每一項也必須是數組,內部數組的首個項會作為鍵,第二項則為對應值。因此整個Map就被這些雙項數組填充。
let map = new Map([
["name", "cc"],
["age", 26]
]);
console.log(map.has("name"));//true
console.log(map.get("name"));//cc
console.log(map.has("age"));//true
console.log(map.get("age"));//26
console.log(map.size);//2
Map上的forEach()方法
let map = new Map([
["name", "cc"],
["age", 26]
]);
map.forEach(function(value, key, source) {
console.log(`${key}的值是${value}`);
console.log(source === map);
})