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.属性和方法

var weakset = new WeakSet()
let aObj = {a:'aa'}
weakset .add(aObj)
  1. 适用
    可以用在储存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.属性和方法

5.Map转换为数组结构

var m = new Map([['0','zhangsan'],['1','lisi']]);
console.log([...m.keys()]);// ["0", "1"]

WeakMap

与Map类似,唯一区别在于它只接受对象作为键名,而且不计入垃圾回收机制。
四个方法:

上一篇下一篇

猜你喜欢

热点阅读