ECMAScript6 Set和Map数据结构

来源:互联网 发布:淘宝微淘官网首页 编辑:程序博客网 时间:2024/06/05 14:24

1.Set ——(1数组去重的另一种方法:Array.from(new Set(array)),

                 2Set可以很容易实现并集,交集和差集

Set方法能够去重

Set的操作方法有:add(),delete(),has(),clear()

Set转为数组:Array.from()

Set的四个遍历方法:keys(),values(),entries(),forEach()

前两个用法相同,第三个方法返回的是键值对的遍历器,Set结构键名和键值是同一个值,forEach()方法参数依次为键值,键名,集合本身。

E.g: let set = new Set([‘red’,’green’,’blue’]);for(let iof set.values()) {console.log(i);}

//red,green,blue依次出现,可以省略values()方法,因为是默认方法

遍历的应用 扩展运算符(...)和Set结构相结合,数组去重 [...new Set(array)]

           数组的mapfilter也可用于Setset = new Set([...set].map(x => x*2))

 

2.WeakSet——成员只能是对象,不能是其他类型的值;垃圾回收机制不考虑WeakSet中的对象,因此不可遍历,可防内存泄露。有add(),has(),delete()三个方法。

 

3.Map——键值对的数据结构 set(),get()方法;解决同名属性碰撞的问题

E.g: let map = new map(); map.set(1,’aaa’);map.get(1) //’aaa’

值得注意的是:只有对同一个对象的引用,Map结构才将其视为同一个键:

var map= new Map();

map.set(['a'], 555);

map.get(['a']) // undefined 表面上是针对同一个键,实际上内存地址不一样。

同理,同样的值的两个实例,在Map结构中被视为两个键。

var k1= ['a'];var k2= ['a'];

new Map().set(k1, 111).set(k2, 222);

map.get(k1) // 111   map.get(k2) // 222

Map结构的操作方法:size属性,set(key,value)(因为是返回Map本身,所以可以采用链式方法),get(key),has(),delete(),clear().

Map结构的遍历方法:keys(),values(),entries()默认遍历接口,forEach()

Map结构转为数组结构,扩展运算符[...map]/[...map.entries],可结合数组的map方法和filter方法实现遍历和过滤。

Map与其他数据之间的转换:

Map  => 数组: [...map]

   数组  => Mapnew Map(array)

Map  => 对象 前提:Map的键都是字符串

   对象  => Map

Map  => Json  JSON.stringify(),Map键名都是字符串,转为对象JsonMap键名有非字符串转为数组Json

 Json  => Map  JSON.parse(),正常情况下,所有键名都是字符串,有一种特殊情况,整个Json是一个数组,每个数组的成员本身又是一个有两个成员的数组

 

4.WeakMap 只接受对象作为键名,null除外,键名指向的对象不计入垃圾回收机制,可防内存泄露。只有四个方法:get(),set(),has(),delete().另一个用处是部署私有属性。

 

0 0
原创粉丝点击