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}