js Map和Set用法及使用场景(持续更新)

?前言

首先这个文章是一个不断维护的项目,会记录我用过的一些方法。如果各位朋友有更好用的方法,欢迎在下方评论,我也会第一时间感谢和更新文章内容的,拜谢!!!

1.Map

map是一个二维数组,一组键值对的结构,具有极快的查找速度:

var m = new Map([['Michael', 95], ['Bob', 75], ['Tracy', 85]]);
m.get('Michael'); // 95 
//初始化Map需要一个二维数组,或者直接初始化一个空Map。Map具有以下方法:
var m = new Map(); // 空Map
m.set('Adam', 67); // 添加新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 删除key 'Adam'
m.get('Adam'); // undefined

由于一个key只能对应一个value,所以,多次对一个key放入value,后面的值会把前面的值冲掉:

var m = new Map();
m.set('Adam', 67);
m.set('Adam', 88);
m.get('Adam'); // 88

案例:leetcode 3.无重复字符的最长子串

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3var lengthOfLongestSubstring = function(s) {
    //思路  循环做比较 看看每个字母有没有相等的 相等就是最长子串长度
    // 使用双指针解决 + hash
    // 定义一个map用来充当滑块,end往右边走
    // 如果map里没有s[end],就把s[end]丢到map里,同时刷新无重复字符的最大长度
    // 如果map里有s[end],那么就从左边开始删,直到把重复的那个值删掉,重新进入无重复的条件中
    const len = s.length
    let hashMap = new Map()
    let start = 0
    let end = 0
    let maxLen = 0
    while (end<len){
      if(!hashMap.has(s[end])){
        hashMap.set(s[end++], 1)
        maxLen = Math.max(maxLen, [...hashMap.keys()].length)
      }else{
        hashMap.delete(s[start++])
      }
    }
  
 
  return  maxLen
}

2.Set

Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
要创建一个Set,需要提供一个Array作为输入,或者直接创建一个空Set:

var s1 = new Set(); // 空Set
var s2 = new Set([1, 2, 3]); // 含1, 2, 3
//重复元素在Set中自动被过滤:
var s = new Set([1, 2, 3, 3, '3']);
s; // Set {1, 2, 3, "3"}

可以用set实现数组去重

let arr=[1,1,2,3,4]
let arr1=Array.from(new Set(arr)) // 1,2,3,4
//方法2
let arr2=[...new Set(arr)]// 1,2,3,4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值