浅析es6 ---- map & set
set是对数组的延展,map是对对象的延展 ---- WeakSet是告别过去的set,WeakMap同样是告别过去的map。
//set和map自带遍历器,keys(key遍历) values(value遍历) entries(key,value一起遍历) forEach
//set的方法 has 、add 、delete 、clear
//set去重
//原理:set内存在键和值,且键值相等,当键值相等时会相互覆盖,所以能实现去重
// let arr=[1,2,4,2,5,7,31,1];
// let setarr = new Set(arr);
// console.log(setarr);
// arr = [...setarr];
// console.log(arr);
//set求交集、并集、差集
//原理:通过转数组获得数组的方法实现,可以通过这个思路实现更多的功能
// let set1 = new Set([1, 2, 4, 5]);
// let set2 = new Set([2, 3, 4, 7]);
// let bingji = new Set( [...set1],[...set2] );
// console.log(bingji);
// let jiaoji = [...set1].filter(i => set2.has(i));
// console.log(jiaoji);
// let chaji = [...set2].filter(i => !set1.has(i));
// console.log(chaji);
//WeakSet 类似于Set,不可存放相同的值,两者不同的是,WeakSet只能存放对象,即Object构建出来的对象,如array...
//WeakSet 方法add 、delete 、has 且其无法遍历
//JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制。
//map 解决了只能使用字符当键的问题,可以使用变量或者常量为其的键
//map 的方法,set 、get 、has、 delete
//任何具有 Iterator 接口、且每个成员都是一个双元素的数组的数据结构都可以当作Map构造函数的参数。这就是说,Set和Map都可以用来生成新的 Map。
//example:
// const items = [
// ['name', '张三'],
// ['title', 'Author']
// ];
// const map = new Map();
// items.forEach(
// ([key, value]) => map.set(key, value)
// );
//map构建时内部发生的事情
// 详见阮一峰ES6
// Map可以使用...转变为数组
//WeakMap 和Map一样也是键值对组合,但是不同的是,WekMap只接受对象,即Object构建的(null除外) 为键值 和WeakSet一样不可遍历