Set与Map的奇妙世界:他们没那么复杂呀

前言

        在JavaScript的世界里,ES6引入了两个非常强大且实用的数据结构:Set和Map。这两个结构为我们的编程生活带来了极大的便利,它们就像是我们日常生活中的工具,帮助我们更好地管理数据和信息。今天,让我们一起走进这个奇妙的世界,通过生活中的场景来理解它们的工作原理。

Set:无序的集合

        想象一下,你正在整理一堆杂乱无章的照片,你希望将它们按照拍摄的时间顺序进行排序。在JavaScript中,Set可以帮助你轻松地完成这项工作。Set是一个无序的集合,它只存储唯一的值,无论是原始值还是对象引用。

示例:

        假设你有一堆重复的照片,你想要创建一个不包含重复照片的集合。使用Set,你可以轻松地实现这一点。

let uniquePhotos = new Set([
  'photo1.jpg',
  'photo2.jpg',
  'photo1.jpg',
  'photo3.jpg'
]);
console.log(uniquePhotos); // Set(3) { 'photo1.jpg', 'photo2.jpg', 'photo3.jpg' }

在上面的代码中,我们使用了new Set()来创建一个新的Set对象,然后向其中添加了几张照片的文件名。尽管我们添加了重复的照片文件名,但Set会自动去除重复项,最终只保留唯一的值。

常用API

  • set(key, value):向Map中添加一个新的键值对。
  • get(key):获取Map中某个键对应的值。
  • delete(key):删除Map中的一个特定键值对。
  • has(key):判断Map中是否存在一个特定的键。
  • size:返回Map中键值对的数量。
  • clear():清空整个Map。

Map:键值对的映射

        现在,让我们再想象一个场景,你正在整理一本电话簿,你需要记录每个人的姓名和电话号码。在JavaScript中,Map可以帮助你轻松地完成这项工作。Map是一个键值对的集合,它允许你使用任何类型的值作为键(key)或值(value)。

示例:

        假设你正在创建一个电话簿,你想要记录每个人的姓名和电话号码。使用Map,你可以轻松地实现这一点。

let phoneBook = new Map();
phoneBook.set('Alice', '123-456-7890');
phoneBook.set('Bob', '234-567-8901');
phoneBook.set('Alice', '098-765-4321');
console.log(phoneBook);
// Map(3) {"Alice" => "098-765-4321", "Bob" => "234-567-8901", Symbol(Symbol()) => "123-456-7890"}

在上面的代码中,我们使用了new Map()来创建一个新的Map对象。然后,我们使用set()方法添加了几个键值对。尽管我们尝试为"Alice"添加了两个电话号码,但Map只会保留最后一个设置的键值对。这意味着"Alice"的电话号码被更新为"098-765-4321"。

常用API:

  • set(key, value):向Map中添加一个新的键值对。
  • get(key):获取Map中某个键对应的值。
  • delete(key):删除Map中的一个特定键值对。
  • has(key):判断Map中是否存在一个特定的键。
  • size:返回Map中键值对的数量。
  • clear():清空整个Map。

遍历Set与Map

Set的遍历

Set对象是一个迭代器,你可以使用for...of循环来遍历它的所有元素

示例

let mySet = new Set([1, 2, 3, 4, 5]);
for (let element of mySet) {
  console.log(element);
}
// 输出:
// 1
// 2
// 3
// 4
// 5

Map的遍历

Map对象也是一个迭代器,你可以使用for...of循环来遍历它的所有键值对。

示例

let myMap = new Map([
  ['a', 1],
  ['b', 2],
  ['c', 3]
]);
for (let [key, value] of myMap) {
  console.log(key + ': ' + value);
}
// 输出:
// a: 1
// b: 2
// c: 3

面试中你该如何回答Set和Map的区别

在面试中,经常会问到Set和Map的区别,相信不需要小编,你也能在网络中搜索出一堆,可能有部分小伙伴在回忆的过程是很困难的。今天小编整理了一套顺口溜,仅供参考:

Set无序去重忙,
Map有序记心上。
key莫重复可多样,
Value自由任徜徉。

性能出众Map强,
兼容性好不彷徨。

实例清晰增信服,

技能精湛显专长。

解释

  • “Set无序去重忙”:描述了Set的无序性和去重功能,用“忙”字强调了Set在处理数据时的活跃性。
  • “Map有序记心上”:强调了Map的有序性,以及它在存储数据时的逻辑性,用“心上”暗示了Map在记忆数据方面的重要性。
  • “key莫重复可多样”:描述了Map中键不允许重复,以及多样性的规则。
  • “Value自由任徜徉”:描述了Map中值的自由性,可以随意存储各种信息。
  • “性能出众Map强”:强调了Map在性能上通常优于Set,尤其是在需要频繁查找和更新数据时。
  • “兼容性好不彷徨”:Set和Map在现代浏览器中兼容性良好,但也要在使用时需要考虑目标用户可能使用的环境。
  • “实例清晰增信服”:在回答面试问题时,尽量结合具体的例子和代码示例来阐述你的观点,更容易让面试官信服。
  • “技能精湛显专长”:总结上一句,同时也会让面试官觉得你很好的理解了这些数据结构和应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

妍思码匠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值