es6新增了Set、Map、WeekSet、WeekMap 四种数据结构。C#中有HashSet和Dictionary,HashSet和Dictionary都是范式集合,但是es6不支持接口开发,所以也就不存在范式。Set 是存唯一值的集合,Map是存键值对的集合。WeakSet、WeakMap分别是它们的弱式表现的兄弟,只能存对象数据结构,拥有的方法少很多,使用时需要注意。
1、set:存放代表唯一值的集合。这个唯一是使用Object.is()来判断的。撸起:
let set = new Set([1,1,"1",2,3,{},["aa","bb","cc"],NaN,NaN]);
console.log(set);
let set = new Set([1,1,"1",2,3,{},["aa","bb","cc"],NaN,NaN]);
console.log(set);//方法列表
set.add("您好");//如果该值已经存在,不进行任何修改,没有该值才新增
set.delete("您好");//删除一项,如果有该项,返回true,如果没有返回false
set.clear();//清空集合set = new Set([1,1,"1",2,3,{},["aa","bb","cc"],NaN,NaN]);//循环迭代器
set.forEach(function (value,key) {console.log(key,":",value);
})
//生成器
let itr =set.entries();
console.log("itr.next():",itr.next())
console.log("itr.next():",itr.next());//将set 转换为数组
let arr = [...set];//展开运算符
console.log("arr:",arr);
2、WeakSet:存放代表唯一值的集合,是Set的弱化版本,只有add()、has()、delete()方法,不能迭代(foreach()、key()、values()等方法),不可以实例化的时候初始默认值,保存的值必须是对象数据结构。撸起:
let wset = new WeakSet();
let key = {name:"爱钱的大傻憨",age:18
};//wset.add("1");//报错
wset.add(key);
console.log("wset:",wset);console.log("wset.delete(key):",wset.delete(key));
console.log("wset:",wset);
3、Map:存放代表唯一值的集合,是Set的弱化版本,只有add()、has()、delete()方法,不能迭代(foreach()、key()、values()等方法),不可以实例化的时候初始默认值,保存的值必须是对象数据结构。撸起:
let map = new Map([["name","爱钱的大傻憨"],["age",18]]);
console.log("map:",map);
map.set("work",function(){alert('Hell')});//没有add方法,只有set方法
console.log("map:",map);
4、WeakMap:Map的弱表现数据结构,相对map来说,功能也是弱很多。
let wmap = new WeakMap();
wmap.set({name:"爱钱的大傻憨"},"您好");
console.log(wmap);
Set、Map是es的一种新数据结构,类似于数组,但是key是唯一的。WeakSet、WeakMap请少用,因为它的key值要求比较特殊,一定得考虑好了再使用。