[图片上传中...(image.png-24fde2-1590629267229-0)]
Map本质上是键值对的集合(Hash 结构)。
原因:传统对象只能用字符串当作键,这给它的使用带来了很大的限制。ES6 Map“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
也就是说,Object 结构提供了“字符串—值”的对应,Map 结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。
Map实例的属性和操作方法(6):
size:返回成员总数
set(key, value):添加新的键值
get(key):读取键对应的值
has(key):是否有某个键
delete(key):删除某个键
clear():清空
Map实例的遍历方法(4):
keys():返回键名的遍历器。
values():返回键值的遍历器。
entries():返回键值对的遍历器。
forEach()/for(let [key, value] of newMap):遍历 Map 的所有成员
初始化--两种
1.var hashMap = new Map()
hashMap.set('a',1)
hashMap.set('b',2)
2.var hashMap = new Map([
['a',1],['b',2]
])
应用
数组去重
找到数组中重复的数
找到数组中第一个非重复的数
// 数组去重
function arrayNonRepeatfy(arr) {
let hashMap = new Map()
let result = [] // 数组用于返回结果
for (let i = 0; i < arr.length; i++) {
if(hashMap.has(arr[i])) { // 判断 hashMap 中是否已有该 key 值
hashMap.set(arr[i], true) // 后面的true 代表该 key 值在原始数组中重复了,false反之
} else { // 如果 hashMap 中没有该 key 值,添加
hashMap.set(arr[i], false)
result.push(arr[i]);
}
}
return result
}
// 找到数组中重复的数
function findRepeatNumInArray(arr) {
let hashMap = new Map()
let result = new Array()
for (let i = 0; i < arr.length; i++) {
hashMap.set(arr[i], hashMap.has(arr[i]))
}
// 得到 hashMap 后,对其进行遍历,值为 true,对应的键就是重复的数
for(let [key, value] of hashMap.entries()) {
if(value === true) {
result.push(key)
}
}
return result
}
// 找到数组中第一个非重复的数
function findFirstNonRepeat(arr) {
let hashMap = new Map()
for (let i = 0; i < arr.length; i++) {
hashMap.set(arr[i], hashMap.has(arr[i]))
}
// 找到第一个值为 false 的,就代表第一个非重复数,return 就好了
for(let [key, value] of hashMap.entries()) {
if(value === false) {
return key
}
}
return "全部重复"
}
网友评论