JavaScript ES6 中Map结构的使用

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;
 };
  1. 字母异位词分组
 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());
};
  1. 有效的字母异位词
 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;    
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值