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的题目
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; };