小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
问题一:什么是Map和Set?
ES6以前,在JavaScript中实现“键/值”式存储可以使用Object来方便高效的完成,也就是使用对象属性作为键,再使用属性来引用值,像下面这样
let student = {
name: '啊呜',
sex: 'male',
age: 18
}
但是这种实现并非没有问题,这里的键只能是对象的属性,于是就出现了Map这一新的集合类型,为JavaScript带来了真正的键/值存储机制,我们可以这样初始化映射:
const map = new Map([
['key1','value1'],
['key2','value2'],
['key3','value3'],
])
ES6还新增了Set这一种新的集合类型,Set在很多方面都像是加强的Map,这是因为它们的大多数API和行为都是共有的。Set集合类型的特点是不能存储重复元素,成员值都是唯一且没有重复的值
问题二:Map和Set的基本API怎么用?
Map的API:
-
get() :返回键值对
-
set() :添加键值对,返回实例
-
delete() :删除键值对,返回布尔
-
has() :检查键值对,返回布尔
-
clear() :清除所有成员
-
keys() :返回以键为遍历器的对象
-
values() :返回以值为遍历器的对象
-
entries() :返回以键和值为遍历器的对象
-
forEach() :使用回调函数遍历每个成员
Set的API:
-
add() :添加值,返回实例
-
delete() :删除值,返回布尔
-
has() :检查值,返回布尔
-
clear() :清除所有成员
-
keys() :返回以属性值为遍历器的对象
-
values() :返回以属性值为遍历器的对象
-
entries() :返回以属性值和属性值为遍历器的对象
-
forEach() :使用回调函数遍历每个成员
好啦,到这,相信你对JS中的Map和Set有了一定的了解,我们现在尝试使用这两种集合类型,在LeetCode中大显身手~
LeetCode20:有效的括号
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 示例1: 输入: s = "()"
输出: true 示例2: 输入: s = "()[]{}"
输出: true 示例 3: 输入: s = "(]"
输出: false
这题的思路是使用栈+Map来解决,直接上代码:
LeetCode141:环形链表
给定一个链表,判断链表中是否有环。 示例:
输入: head = [3,2,0,-4], pos = 1
输出: true
这题我的思路是使用Set来解决,当然还有一种方法,用快慢指针来解决,但是比较难想到,而且比较反人类,我们这里只介绍Set,清晰易懂~
最后
⚽这篇文章主要介绍了Map和Set在部分算法问题中的妙用~,相信你应该有些许收获,后面会多多更新算法相关的文章,So关注一波呀~
⚾如果你对这篇文章感兴趣欢迎点赞关注+收藏,更多精彩知识正在等你!😘
🏀GitHub 博客地址: github.com/Awu1227 。
🏉笔者还有其他专栏,欢迎阅读~
🏐玩转CSS之美
🎱Vue从放弃到入门
🎳深入浅出JavaScript