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!