js中Map对象和Set对象有什么区别

JavaScript016

js中Map对象和Set对象有什么区别,第1张

对象类似于数组,且成员的值都是唯一的

const

arr

=

[1,

2,

3,

4,

5,

5,

4,

3,

2,

1]

const

set

=

new

Set()

arr.forEach(item

=>

set.add(item))

console.log(set)

//

1,

2,

3,

4,

5

//

数组快速去重

console.log([...new

Set(arr)])

Map

对象是键值对集合,和

JSON

对象类似,但是

key

不仅可以是字符串还可以是对象

var

map

=

new

Map()

var

obj

=

{

name:

'小缘',

age:

14

}

map.set(obj,

'小缘喵')

map.get(obj)

//

小缘喵

map.has(obj)

//

true

map.delete(obj)

//

true

map.has(obj)

//

false

注意:对象的 __proto__ (原型链上的属性)和 constructor 属性,MyObject在obj的原型链上

Set 没有键名,只有键值,不允许有重复值(敲黑板,画重点),重复的值是绝对相等(===),但是NaN和NaN是相等的值,两个对象总是不相等的。

key值相等,后者会覆盖前者,key值相等的概念是绝对相等(===),key值实际上是和内存地址绑定的,只要内存地址不一样,就默认是map的两个成员。

一定要仔细看看Map和Set中举的例子鸭

1.数组转换成map键值对

var m=new Map()

var arr=['a','b','v','r']

for(var i=0i<arr.lengthi++){

m.set(arr[i],i)//转变成新的map键值对,也可以像原有键值对添加新得键值对,具有唯一性,当重复赋值,则会使用最后一个值

}

console.log(m)        //{"a" =>0,"b" =>1,"v" =>2,"r" =>3}

 console.log(m.get('a'))       //查看键值对a的值     0

console.log(m.has('c'))      //查看是否存在这个键值对,返回布尔类型的值     false

console.log(m.delete('r'))            //删除r键值对   返回布尔类型       true

console.log(m)              //{"a" =>0,"b" =>1,"v" =>2}