浅谈js中的Map与Set结构

在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():清除所有成员,没有返回值。

原文地址:https://www.cnblogs.com/pengaijin/p/7659672.html