es6中set与map

es新增数据结构set 与map

1.set

        它类似于数组,但是成员的值都是唯一的,没有重复的值

        设置:set属性构造函数需要用new生成

        New Set()

           Set(array)

        操作:

                add(value) 增加

                delete(value)   删除

                has(value)      查看

                clear()          清空

                size 查看长度

set集合特点

1. 内容不可以重复

2. 写入集合中的数据不会自动转换类型

3. 在set中相同的对象不相等

4. 在set NaN是相等的

let n1 = Number('a1');  --->NaN

let n2 = Number('123a');--->NaN

比较时结果为false

console.log(n1 == n2); false

但是在set中会把NaN看为相等值

myset.add(n1);

myset.add(n2);

只能存储一个NaN

2.Weakset

 与set类似,区在于值只能存储对象

方法:

              add()

              delete()

              has()

              weakset不可遍历,多用于储存DOM对象

3.map

与对象类似,由键值对的方式组成

方法:

           set( )     添加  ==  set.add()

           get( )     获取

           size( )    长度

           delete( )  删除

           clear( )   清空

Map中传入二维数组时会自动遍历

4.WeakMap

      里面的值,也只能是对象

      方法:  set()  clear()

      不可遍历

set和map的区别

1.map中的元素是key-value(键值对)对:关键字起到索引的作用,值则表示与索引相关联的数据;Set与之相对就是关键字的简单集合,set中每个元素只包含一个关键字。

2.set的迭代器是const的,不允许修改元素的值;map允许修改value,但不允许修改key。

其原因是因为map和set是根据关键字排序来保证其有序性的,如果允许修改key的话,那么首先需要删除该键,然后调节平衡,再插入修改后的键值,调节平衡,如此一来,严重破坏了map和set的结构,导致iterator失效,不知道应该指向改变前的位置,还是指向改变后的位置。所以STL中将set的迭代器设置成const,不允许修改迭代器的值;而map的迭代器则不允许修改key值,允许修改value值。

3.map支持下标操作,set不支持下标操作。map可以用key做下标,map的下标运算符[ ]将关键码作为下标去执行查找,如果关键码不存在,则插入一个具有该关键码和mapped_type类型默认值的元素至map中,因此下标运算符[ ]在map应用中需要慎用,const_map不能用,只希望确定某一个关键值是否存在而不希望插入元素时也不应该使用,mapped_type类型没有默认值也不应该使用。如果find能解决需要,尽可能用find。

你可能感兴趣的:(javaScript,面试题,es6,前端,javascript)