在es6中引入了新的数据类型Map与Set结构 以下是Map与Set的一些简单使用
官方解释:它类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的Hash结构实现。如果你需要“键值对”的数据结构,Map比Object更合适。
Map:
var a=new Map() //新建一个Map对象 console.log(a) //Map(0) {} a.set('name','xiaoming') // 添加值 变成了Map(1) {"name" => "xiaoming"} a.set('age',19) // 添加值 变成Map(2) {"name" => "xiaoming", "age" => 19}
a.get('name') //xiaoming 获取值
总结:Map是以键值对的结构的对象,具有极快的查找速度(优点)。 一个Kay永远只对应一个Value
Set:
Set也是一个构造函数,其数据结构类似于数组,但其不同之处在于永远没有重复的值 。
我们知道在js的这个===判断之下 NaN是不等于NaN的 即
NaN==NaN false NaN===NaN false
那么在其Set结构中 其值是相等的。简单的用法:
let a= new Set() //Set(0) {} a.add(1);//Set(1) {1}
a.add(1);//Set(1){1} 并没有重复添加 a.delete(1) ; //返回true 说明删除成功 console.log(a) //Set(0){}
这个Set对象用于一些去重是极为方便的比如一个简单的数组去重:
var a=[1,2,3,4,5,5,4,3,2,1,NaN,null,undefined,null,NaN]; var b=new Set(a); console.log(b) //Set(8) {1, 2, 3, 4, 5,NaN,null,undefined} //将其转换为数组即可 用es6的扩展运算符也可以的 var c=[...b] //(8) [1, 2, 3, 4, 5, NaN, null, undefined] //或者使用Array.form var f=Array.from(b) //(8) [1, 2, 3, 4, 5, NaN, null, undefined]
总结:
Set只有值而没有键 可以用add添加数据进去,但是重复添加的数据不会出现 可以用delete来进行删除数据 ;下面是详细用法
add(value):添加某个值,返回Set结构本身。
delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
has(value):返回一个布尔值,表示该值是否为Set的成员。
clear():清除所有成员,没有返回值。