jsMap和Set⽤法及使⽤场景(持续更新)
前⾔
⾸先这个⽂章是⼀个不断维护的项⽬,会记录我⽤过的⼀些⽅法。如果各位朋友有更好⽤的⽅法,欢迎在下⽅评论,我也会第⼀时间感谢和更新⽂章内容的,拜谢
1.Map
map是⼀个⼆维数组,⼀组键值对的结构,具有极快的查速度:
var m =new Map([['Michael',95],['Bob',75],['Tracy',85]]);
<('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
<('Adam');// 67
m.delete('Adam');// 删除key 'Adam'
<('Adam');// undefined
由于⼀个key只能对应⼀个value,所以,多次对⼀个key放⼊value,后⾯的值会把前⾯的值冲掉:
var m =new Map();
m.set('Adam',67);
m.set('Adam',88);
<('Adam');// 88
案例:leetcode
输⼊:"abcabcbb"
输出:3
解释:因为⽆重复字符的最长⼦串是"abc",所以其长度为3。
var 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 =0js 二维数组
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