Map
对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Map
的实例属性和操作方法
- size:返回成员总数
- set(key, value):添加新的键值
- get(key):读取键对应的值
- has(key):是否有某个键
- delete(key):删除某个键
- clear():清空
Map
实例的遍历方法:
- keys():返回键名的遍历器。
- values():返回键值的遍历器。
- entries():返回键值对的遍历器。
- forEach():遍历 Map 的所有成员。
具体请参考mdn
利用ES6 语法map,我们可以实现数组去重的功能:
let arr=[1,2,3,1,2,3,"a","a","b"];
function arrayNoRepeat(arr) {
let map = new Map();
let result = new Array(); // 数组用于返回结果
for (let i = 0; i < arr.length; i++) {
if(map.has(arr[i])) { // 判断 map 中是否已有该 key 值
map.set(arr[i], true); // 后面的true 代表该 key 值在原始数组中重复了,false反之
} else { // 如果 map 中没有该 key 值,添加
map.set(arr[i], false);
result.push(arr[i]);
}
}
return result;
}
console.log(arrayNoRepeat(arr));//[1, 2, 3, "a", "b"]
这里再介绍一种简洁的去重方式:
let arr=[1,2,3,1,2,3,"a","a","b"];
console.log([...new Set(arr)]);//[1, 2, 3, "a", "b"]
这里的map打印出来的结果:
console.log(map)
0: {1 => true}
1: {2 => true}
2: {3 => true}
3: {"a" => true}
4: {"b" => false}
通过map我们可以看出,我们能够快速获取数组中重复的数以及第一个重复的数或非重复的数
//重复的数组
let arr=[1,2,3,1,2,3,"a","a","b"];
function findRepeatNumInArray(arr) {
let map = new Map();
let result = new Array();
for (let i = 0; i < arr.length; i++) {
map.set(arr[i], map.has(arr[i]))
}
// 得到 map 后,对其进行遍历,值为 true,对应的键就是重复的数
for(let [key, value] of map.entries()) {
if(value === true) {
result.push(key);
}
}
return result;
}
console.log(findRepeatNumInArray(arr));//[1, 2, 3, "a"]
//找打第一个重复的数
let arr=[1,2,3,1,2,3,"a","a","b"];
function findFirstRepeat(arr) {
let map = new Map();
for (let i = 0; i < arr.length; i++) {
map.set(arr[i], map.has(arr[i]))
}
// 找到第一个值为 true 的,就代表第一个重复数,return 就好了
for(let [key, value] of map.entries()) {
if(value === true) {
return key;
}
}
return "没有重复数据";
}
console.log(findFirstRepeat(arr));//1