Map结构
声明
const person = new Map();
添加元素
person.set("name" , "小明" );
person.set("age", 18);
person.set("hobby", ["看电影" , "看书" , "玩手机"]);
person.set("age", 23);
//如果 Map里面没有这个key值,会直接添加,如果有这个key值,会用新的值来更新旧的值,18被更新为23
获取元素
person.get("hobby");
//得到["看电影" , "看书" , "玩手机"]这个数组
元素个数
person.size;
// 3
判断Map有无某个key值
person.has("age");
//返回true
删除元素
person.delete("age");
//如果有这个元素,删除后返回true,否则返回false
遍历Map结构
for(const i of person.values()) //遍历得到数值
for(const i of person.keys()) //遍历得到key值
for(const i of person.entries()) //得到key和value值
LeetCode可以用到Map的题目
LeetCode 1. 两数之和
LeetCode 3. 无重复字符的最长子串
LeetCode 49. 字母异位词分组
LeetCode 242. 有效的字母异位词
1.两数之和
var twoSum = function(nums, target) {
let map = new Map();
for(let i = 0 ; i < nums.length ; i++){
if(map.has(target-nums[i])){
return [map.get(target-nums[i]),i];//get得到value值
}
else map.set(nums[i],i);
}
return [];
};
3.无重复字符的最长子串
//其实应该用set结构的
var lengthOfLongestSubstring = function(s) {
let map = new Map();
let res = 0;
for(let i = 0, j = 0; i < s.length ;i++) {
if(!map.has(s[i])) {
map.set(s[i]);
res = Math.max(res ,map.size);
}else {
while(map.has(s[i])) {
map.delete(s[j++]);
}
map.set(s[i]);
}
}
return res;
};
- 字母异位词分组
var groupAnagrams = function(strs) {
let map = new Map();
for(let i of strs) {
let key = i.split('').sort().join();
if(map.has(key)) {
map.get(key).push(i);
} else {
map.set(key ,[i]);
}
}
return Array.from(map.values());
};
- 有效的字母异位词
var isAnagram = function(s, t) {
if(s.length != t.length) return false;
let hashs = new Map();
let hasht = new Map();
for(let i = 0 ;i < s.length ;i++) {
if(hashs.has(s[i])) hashs.set(s[i],hashs.get(s[i]) + 1);
else hashs.set(s[i],1);
if(hasht.has(t[i])) hasht.set(t[i],hasht.get(t[i])+1);
else hasht.set(t[i],1);
}
for(let key of hashs.keys()){
if(!hasht.has(key)||hasht.get(key)!=hashs.get(key)) return false;
}
return true;
};