ES6知识点-Set、Map、WeakSet、WeakMap
除了Array之外的其他集合使用方法。
Set
基本用法
Set类似Array,但是item是唯一的,没有重复项。
例:
var set = new Set();
set.add(1);//添加值
set.add(1);//值相同,不会重复添加
set.add('1');
set.add({key:'1'});
console.log(set); // Set(3) {1,'1',{key:'1'}}
console.log([...set]);// [1,'1',{key:'1'}]
console.log(set.size);// 3
以上相当于:
var set = new Set([1,'1',{key:'1'}]);
console.log(set); // Set(3) {1,'1',{key:'1'}}
数组去重:
var array = [1,2,3,1,3];
var set = new Set(array);
console.log([...set]);//[1,2,3]
迭代
迭代的方式有两种:forEach、for…of
forEach:
var set = new Set([1,'1',{key:'1'}]);
set.forEach((value) => {
console.log(value);
//1
//'1'
//{key:'1'}
});
for…of:
var set = new Set([1,'1',{key:'1'}]);
for(let value of set){
console.log(value);
//1
//'1'
//{key:'1'}
}
其他
其他用法还包括:
has() - 返回true/false,表示值是否存在集合中。
delete() - 删除某个值,返回true/false,表示删除成功失败。
clear() - 清除所有值
Map
基本用法
map是储存key/value键值对的集合。
例:
var map = new Map(),
value1 = '1',
value2 = {
key:'2'
};
map.set(0,'0');
map.set(1,value1);
map.set({key:2},value2);
console.log(map);//Map(3) {0 => "0", 1 => "1", {key:2} => {key:"2"}}
以上相当于:
var map,
value1 = '1',
value2 = {
key:'2'
};
map = new Map([[0,'0'],[1,value1],[{key:2},value2]]);
console.log(map);//Map(3) {0 => "0", 1 => "1", {key:2} => {key:"2"}}
想要通过key获取值,可以用get()方法:
var map = new Map(),
value1 = '1',
value2 = {
key:'2'
};
map.set(0,'0');
map.set(1,value1);
map.set({key:2},value2);
console.log(map.get(1));//'1'
迭代
迭代的方式有两种:forEach、for…of
例:
var map = new Map(),
value1 = '1',
value2 = {
key:'2'
};
map.set(0,'0');
map.set(1,value1);
map.set({key:2},value2);
// forEach
map.forEach((value,key) => {
console.log(`key:${key} 对应的value:${value}`);
// key:0 对应的value:0
// key:1 对应的value:1
// key:[object Object] 对应的value:[object Object]
});
//for...of
for(let entry of map){
console.log(`key:${entry[0]} 对应的value:${entry[1]}`);
// key:0 对应的value:0
// key:1 对应的value:1
// key:[object Object] 对应的value:[object Object]
}
迭代方法还包括:
entries() - 获取所有items
keys() - 获取所有keys
values() - 获取所有values
其他
其他用法还包括:has() 、delete(、clear() 。与Set相似。
如:
//用上述map对象
map.has(1);// true
map.delete(1); // true
map.clear();
WeakSet
基本用法
WeakSet与Set类似,也是值不重复的集合。
然而,WeakSet的值只能是对象,不能是其他值。(唯一对象的集合)
例如:
var ws = new WeakSet(),
obj = {
key1: {
k:'1'
},
key2: {
k:'2'
}
};
ws.add(obj.key1);
ws.add(obj.key2);
console.log(ws);// WeakSet {Object{k:"1"},Object{k:"2"}}
console.log(ws.has(obj.key1));//true
delete obj.key1;
console.log(ws.has(obj.key1));//false
WeakMap
基本用法
WeakMap与Set相似。但是,WeakMap的key必须是对象(并且不为null)
例如:
var wm = new WeakMap(),
obj = {
key1:{
k:'1'
},
key2:{
k:'2'
}
};
wm.set(obj.key1,'value1');
wm.set(obj.key2,'value2');
console.log(wm); // WeakMap {Object{key:'1'} => 'value1',Object{key:'2'} => 'value2'}
console.log(wm.has(obj.key1));//true
delete obj.key1;
console.log(wm.has(obj.key1));//false
End!