ES6的Set、Map数据结构 数组
2016-12-20 本文已影响0人
sponing
Set 数组
filter过滤数组的数值
var ss = [1,2,3,4,5,6,7,8]
ss.filter(function(ele){
if(ele>5){
return true
}
return false
});
console.log(ss) //[6,7,8]
并集
合并两个数组,去掉重复的
let a = new Set([1,2,3,4])
let b = new Set({4,5,6})
let union = new Set([...a,...b])
console.log([...union]) //1 2 3 4 5 6 去掉重复的4
交集
利用filter()和has()来进行数据交集
let a = new Set([1,2,3,4])
let b = new Set({4,5,6})
let intersect = [...a].filter(function(ele){
return b.has(elem)
})
// es6 简写方式
// let intersect = [...a].filter(
// x => x.has(x)
// })
差集
let a = new Set([1,2,3,4])
let b = new Set({4,5,6})
let difference= [...a].filter(function(ele){
return !b.has(elem)
})
//1,2,3
WeakSet 针对对象
1.构造函数
WeakSet与Set结构类似,也是不重复的值的集合。但是它与Set有两个区别。
首先,WeakSet的成员只能是对象,而不能是其它类型的值。
其次,WeakSet中的对象都是弱引用,即垃圾回收机制不考虑WeakSet对该对象的引用。也就是说,如果其它对象不在引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于WeakSet中。这个特点意味着无法引用WeakSet的成员,因此WeakSet是不可遍历的。
报错
var ws = new WeakSet();
ws.add(1);
// Uncaught TypeError: Invalid value used in weak set
2.属性和方法
- add(value)
- delete()
- has()
var weakset = new WeakSet()
let aObj = {a:'aa'}
weakset .add(aObj)
- 适用
可以用在储存DOM节点,当DOM节点添加和删除后不会导致内存泄漏。
weakset 不能取值,不能显示 只用来表示是否有重复的对象
Map 对象
var mapData = new Map();
var obj1 = {};
var obj2 = {};
mapData.set(obj1,'111') //添加元素
mapData.set(obj2,'333')//添加元素
console.log( mapData.get(obj1) ) // 获取
console.log( mapData.has(obj1) ) //判断
console.log( mapData.delete(obj1) ) 删除
mapData.clear() //清空
1.目的Map结构与对象类似,与传统的对象对比而言,传统仅能使用字符串当做键, Map结构则可以使用变量当做键。这种对应关系可以称之为“值--值”对应,是对象的完善版。
2.构造函数构造
函数接受一个二维数组当做参数。
var m = new Map([['name','zhangsan'],['sex','male']]);
console.log(m);// Map {"name" => "zhangsan", "sex" => "male"}
如果对同一个键多次赋值,后面的值将覆盖前一次的值。
只有对同一对象的引用,Map结构才将其视为同一个键。
3.属性和方法
- size
- set(key,value)
- get(key)
- has(key)
- delete(key)
- clear()
4.遍历方法 - keys()
- values()
- entries()
- forEach()
5.Map转换为数组结构
var m = new Map([['0','zhangsan'],['1','lisi']]);
console.log([...m.keys()]);// ["0", "1"]
WeakMap
与Map类似,唯一区别在于它只接受对象作为键名,而且不计入垃圾回收机制。
四个方法: