Set
ES6 供應了新的數據組織 Set。它類似於數組,然則成員的值都是唯一的,沒有反覆的值。
用法:new Set([iterable])
const set = new Set([1, 2, 3, 4, 4, 4]);
//[1, 2, 3, 4]
Set組織有以下屬性:
- Set.prototype.constructor: 組織函數,默許就是Set函數。
- set.prototype.size : 返回Set的成員總數。
Set組織有以下要領:
- add(value):增加某個值,返回 Set 組織自身。
- delete(value):刪除某個值,返回一個布爾值,示意刪除是不是勝利。
- has(value):返回一個布爾值,示意該值是不是為Set的成員。
- clear():消滅一切成員,沒有返回值。
const set = new Set();
//增加元素
set.add(1).add(2).add(2);
set.size; //2
//搜檢元素
set.has(2); //true
set.has(3); //false
//刪除元素
set.delete(2);
set.has(2); //false
//清空鳩合
set.clear();
set.size; //0
一些罕見運用
//數組去重
let arr = [1, 2, 3, 2, 5, 5];
let unique = [...new Set(arr)];
// [1, 2, 3, 5]
//交,並,差集
let a = new Set([1, 2, 3]);
let b = new Set([4, 3, 2]);
// 並集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4}
// 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// set {2, 3}
// 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}
Map
JavaScript 的對象(Object),本質上是鍵值對的鳩合(Hash 組織),然則傳統上只能用字符串看成鍵。ES6中的Map組織也是鍵值對的鳩合,然則“鍵”的局限不限於字符串,各種類型的值(包括對象)都可以看成鍵。
用法:new Map([iterable])
const map = new Map();
屬性和要領
- size:返回成員總數。
- set(key, value):增加鍵值對到映照中
- get(key):獵取映照中某一個鍵的對應值
- delete(key):將某一鍵值對移除出映照中
- clear():清空映照中一切的鍵值對
- entries():返回一個以二元數組(鍵值對)作為元素的數組
- has(key):搜檢映照中是不是包括某一鍵值對
- keys():返回一個一當前映照中一切鍵作為元素的可迭代對象
- values():返回一個一當前映照中一切值作為元素的可迭代對象
const map = new Map();
//增加鍵值對
map.set(1, 'aaa');
map.set(2, 'bbb').set('string', 'sssss');
map.get(1); // 'aaa'
map.size; // 3
//刪除鍵值
map.delete(2);
map.has(2); //false
//遍歷要領
for(let key of map.keys()){
console.log(key);
}
// 1
// 'string'
for(let key of map.values()){
console.log(key);
}
// 'aaa'
// 'sssss'
map.forEach(function(value, key, map){
console.log('key:'+key+', value:'+value)
})
// 'key:1, value:aaa'
// 'key:string, value:sssss'