最新要闻
- 两女孩砸成人用品售卖机盗走商品,得手后大笑离去
- 把iP15 Pro Max比下去了!iPhone16 Pro Max升级苹果史上最大屏
- 段永平再评“哲库事件”:长远看不合适的、最好现在就停下来!
- 要闻速递:谷歌AI公司创始人看衰传统搜索引擎:十年内将消亡
- 天天观焦点:国产安卓手机成功超越苹果了吗?这问题其实很复杂
- 每日看点!毕业生收Offer租房后遭HR毁约拉黑:电话也不接了
- 天天速读:百超(深圳)中标“核电粮仓”激光切割机及服务项目
- 环球最新:5月18日杜甫草堂免费门票老年人要预约么?
- 被视为格力“第二个董明珠”的孟羽童被开除:人设崩了?|播报
- 今日要闻!美国上路私家车平均车龄12.5年 创20年来新高!原因现实
- 焦点消息!AMD Zen5全家泄露:192核力压Intel 144核!1.5GB缓存无敌
- 全球热点评!丰田卡罗拉高速错过出口强行变道:后方货车紧急制动轮冒青烟
- 中国移动也能捅破天 5G手机可直连卫星通信_每日观察
- 边走边拍⑨一环路烟火人间“串”起 地道成都味|观热点
- 换皮系统实锤了?Win11曝出Win8老版本残留
- 新动态:被观众喷爆!《埃及艳后》成网飞评价最差剧集之一
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
记录--10个超级实用的Set、Map使用技巧-每日时讯
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
Set是一种类似于数组的数据结构,但是它的值是唯一的,即Set中的每个值只会出现一次。Set对象的实例可以用于存储任何类型的唯一值,从而使它们非常适用于去重。
(资料图)
Map是一种键值对集合,其中每个键都是唯一的,可以是任何类型,而值则可以是任何类型。Map对象的实例可以用于存储复杂的对象,并且可以根据键进行快速的查找和访问。
以下是Set和Map的一些常用方法:
Set:
- new Set(): 创建一个新的Set对象
- add(value): 向Set对象中添加一个新的值
- delete(value): 从Set对象中删除一个值
- has(value): 检查Set对象中是否存在指定的值
- size: 获取Set对象中的值的数量
- clear(): 从Set对象中删除所有值
Map:
- new Map(): 创建一个新的Map对象
- set(key, value): 向Map对象中添加一个键值对
- get(key): 根据键获取Map对象中的值
- delete(key): 从Map对象中删除一个键值对
- has(key): 检查Map对象中是否存在指定的键
- size: 获取Map对象中的键值对数量
- clear(): 从Map对象中删除所有键值对
Set和Map是非常有用的数据结构,它们可以提高程序的性能和可读性,并且可以简化代码的编写。
Set
去重
使用 Set 可以轻松地进行数组去重操作,因为 Set 只能存储唯一的值。
const arr = [1, 2, 3, 1, 2, 4, 5];const uniqueArr = [...new Set(arr)];console.log(uniqueArr); // [1, 2, 3, 4, 5]
数组转换
可以使用 Set 将数组转换为不包含重复元素的 Set 对象,再使用 Array.from() 将其转换回数组。
const arr = [1, 2, 3, 1, 2, 4, 5];const set = new Set(arr);const uniqueArr = Array.from(set);console.log(uniqueArr); // [1, 2, 3, 4, 5]
优化数据查找
使用 Set 存储数据时,查找操作的时间复杂度为 O(1),比数组的 O(n) 要快得多,因此可以使用 Set 来优化数据查找的效率。
const dataSet = new Set([1, 2, 3, 4, 5]);if (dataSet.has(3)) { console.log("数据已经存在");} else { console.log("数据不存在");}
并集、交集、差集
Set数据结构可以用于计算两个集合的并集、交集和差集。以下是一些使用Set进行集合运算的示例代码:
const setA = new Set([1, 2, 3]);const setB = new Set([2, 3, 4]);// 并集const union = new Set([...setA, ...setB]);console.log(union); // Set {1, 2, 3, 4}// 交集const intersection = new Set([...setA].filter(x => setB.has(x)));console.log(intersection); // Set {2, 3}// 差集const difference = new Set([...setA].filter(x => !setB.has(x)));console.log(difference); // Set {1}
模糊搜索
Set 还可以通过正则表达式实现模糊搜索。可以将匹配结果保存到 Set 中,然后使用 Array.from() 方法将 Set 转换成数组。
const data = ["apple", "banana", "pear", "orange"];// 搜索以 "a" 开头的水果const result = Array.from(new Set(data.filter(item => /^a/i.test(item))));console.log(result); // ["apple"]
使用 Set 替代数组实现队列和栈
可以使用 Set 来模拟队列和栈的数据结构。
// 使用 Set 实现队列const queue = new Set();queue.add(1);queue.add(2);queue.add(3);queue.delete(queue.values().next().value); // 删除第一个元素console.log(queue); // Set(2) { 2, 3 }// 使用 Set 实现栈const stack = new Set();stack.add(1);stack.add(2);stack.add(3);stack.delete([...stack][stack.size - 1]); // 删除最后一个元素console.log(stack); // Set(2) { 1, 2 }
Map
将 Map 转换为对象
const map = new Map().set("key1", "value1").set("key2", "value2");const obj = Object.fromEntries(map);
将 Map 转换为数组
const map = new Map().set("key1", "value1").set("key2", "value2");const array = Array.from(map);
记录数据的顺序
如果你需要记录添加元素的顺序,那么可以使用Map
来解决这个问题。当你需要按照添加顺序迭代元素时,可以使用Map
来保持元素的顺序。
const map = new Map();map.set("a", 1);map.set("b", 2);map.set("c", 3);map.set("d", 4);for (const [key, value] of map) { console.log(key, value);}// Output: a 1, b 2, c 3, d 4
统计数组中元素出现次数
可以使用 Map 统计数组中每个元素出现的次数。
const arr = [1, 2, 3, 1, 2, 4, 5];const countMap = new Map();arr.forEach(item => { countMap.set(item, (countMap.get(item) || 0) + 1);});console.log(countMap.get(1)); // 2console.log(countMap.get(2)); // 2console.log(countMap.get(3)); // 1
统计字符出现次数
使用Map数据结构可以方便地统计字符串中每个字符出现的次数。
const str = "hello world";const charCountMap = new Map();for (let char of str) { charCountMap.set(char, (charCountMap.get(char) || 0) + 1);}console.log(charCountMap); // Map { "h" => 1, "e" => 1, "l" => 3, "o" => 2, " " => 1, "w" => 1, "r" => 1, "d" => 1 }
缓存计算结果
在处理复杂的计算时,可能需要对中间结果进行缓存以提高性能。可以使用Map数据结构缓存计算结果,以避免重复计算。
const cache = new Map();function fibonacci(n) { if (n === 0 || n === 1) { return n; } if (cache.has(n)) { return cache.get(n); } const result = fibonacci(n - 1) + fibonacci(n - 2); cache.set(n, result); return result;}console.log(fibonacci(10)); // 55
使用 Map 进行数据的分组
const students = [ { name: "Tom", grade: "A" }, { name: "Jerry", grade: "B" }, { name: "Kate", grade: "A" }, { name: "Mike", grade: "C" },];const gradeMap = new Map();students.forEach((student) => { const grade = student.grade; if (!gradeMap.has(grade)) { gradeMap.set(grade, [student]); } else { gradeMap.get(grade).push(student); }});console.log(gradeMap.get("A")); // [{ name: "Tom", grade: "A" }, { name: "Kate", grade: "A" }]
使用 Map 过滤符合条件的对象
在实际开发中,我们常常需要在一个对象数组中查找符合某些条件的对象。此时,我们可以结合使用 Map 和 filter 方法来实现。比如:
const users = [ { name: "Alice", age: 22 }, { name: "Bob", age: 18 }, { name: "Charlie", age: 25 }];const userMap = new Map(users.map(user => [user.name, user]));const result = users.filter(user => userMap.has(user.name) && user.age > 20);console.log(result); // [{ name: "Alice", age: 22 }, { name: "Charlie", age: 25 }]
首先,我们将对象数组转换为 Map,以便快速查找。然后,我们使用 filter 方法来过滤符合条件的对象。
这里我们列举了一些使用Set
和Map
的实用技巧,它们可以大大简化你的代码,并使你更有效地处理数据。Set
和Map
是JavaScript中非常有用的数据结构,值得我们在编写代码时好好利用。
本文转载于:
https://juejin.cn/post/7225425984312328252
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
关键词:
记录--10个超级实用的Set、Map使用技巧-每日时讯
世界短讯!腾讯开源的 3 个 GitHub 项目,足够良心!
两女孩砸成人用品售卖机盗走商品,得手后大笑离去
把iP15 Pro Max比下去了!iPhone16 Pro Max升级苹果史上最大屏
段永平再评“哲库事件”:长远看不合适的、最好现在就停下来!
要闻速递:谷歌AI公司创始人看衰传统搜索引擎:十年内将消亡
天天观焦点:国产安卓手机成功超越苹果了吗?这问题其实很复杂
每日看点!毕业生收Offer租房后遭HR毁约拉黑:电话也不接了
天天速读:百超(深圳)中标“核电粮仓”激光切割机及服务项目
js深拷贝
Red Hat Linux安装CentOS的yum源
基于C#和Blazor开发的前后端分离框架
AI女友同时和1000人谈恋爱,狂赚500万
AspNet Core MVC项目接入的登录页验证码(一)
环球最新:5月18日杜甫草堂免费门票老年人要预约么?
恒生指数16日收涨0.04% 互联网科技股集体走强
被视为格力“第二个董明珠”的孟羽童被开除:人设崩了?|播报
今日要闻!美国上路私家车平均车龄12.5年 创20年来新高!原因现实
焦点消息!AMD Zen5全家泄露:192核力压Intel 144核!1.5GB缓存无敌
全球热点评!丰田卡罗拉高速错过出口强行变道:后方货车紧急制动轮冒青烟
中国移动也能捅破天 5G手机可直连卫星通信_每日观察
边走边拍⑨一环路烟火人间“串”起 地道成都味|观热点
微资讯!浅析AIGC for MMKG
全球球精选!C++ | const修饰的变量
焦点快播:谈谈Spring IOC容器的注入方式
换皮系统实锤了?Win11曝出Win8老版本残留
新动态:被观众喷爆!《埃及艳后》成网飞评价最差剧集之一
今日热讯:1032km续航全球量产车第一!极氪001千里续航套装版开启交付
天天快消息!世卫组织建议勿用非糖甜味剂控制体重:会导致2型糖尿病、甚至死亡
苹果Siri即将大升级!体验巨变|全球简讯
博主每天都在纠结选小米13 Pro还是13 Ultra!雷军给出答案
世界最新:美国“悔棋翻盘”破坏多边经贸秩序——起底美国贸易战反智本质述评之三
全球快看点丨统计学习方法笔记-感知机学习方法
今日热文:易基因:多组学关联分析及组学分子实验验证方法(表观组+转录组+微生物组)|干货系列
AHB2APB bridge IP使用
头条:中秋节快乐贺词简短四字_中秋节快乐贺词
弯道超车?无需光刻工艺的处理器来了:成本暴降
重大突破!全国首例心脏不停跳人工心脏植入:患者恢复良好-世界视点
每日报道:21人合买 中2574万彩票摊主已转让摊位:4万就转手
iQOO Neo8系列将支持Wi-Fi 7:峰值速率高达3.6Gbps 焦点信息
网传迪士尼乐园将落户成都 官方回应:暂未收到选址情况 世界时讯
抓好消防安全 保高质量发展_热点
@Getter cheated me
关于忘记kubernetes-master节点的token以及让新node节点加入k8s集群的命令的处理方法
风靡全球20年 “最美奔驰轿车”CLS宣布停产_讯息
电源撑得住吗?AMD CPU功耗未来将达600W 比Intel还高100W 视讯
广东河源2023年1月自考延期考试成绩查询时间:5月11日15时
C#异步方法async/await的三种返回类型
PhotoShop的平替: GIMP
雪榕生物:雪榕源已于2023年第一季度推出产品,具体您可以通过抖音“雪榕膳食旗舰店”详细了解
准点下班被辞退仲裁胜诉 当事人:为讨领导开心的无效加班真没必要
用上“最黑的黑” 比亚迪汉DM-p战神版实拍:3.7秒加速的性能怪兽 世界热门
热点聚焦:喝的人越来越少!星巴克中国最贵单品更换原料但不官宣 网友炮轰降本不降价
国产Chiplet小芯片工艺稳定量产 国际客户4nm工艺产品已出货 焦点日报
微软690亿美元收购动视暴雪交易获欧盟批准
阿里云数据库ClickHouse产品和技术解读
高效联调,可靠发布!华为云推出CodeArts Release发布管理服务
玩转Zabbix智能告警:降噪、排班、认领、升级、IM协同
机器学习服务语音合成,解锁智能养娃新趋势|速看
注册会计师报考费用2023
【新要闻】年轻人越来越吃不起鸭脖?女子武汉坐高铁满车人都在啃鸭脖 直言被馋哭
出海国产手游战绩:米哈游超腾讯 《原神》第一、《崩坏:星穹铁道》第七 天天快看点
管住嘴果然有用!科学家:保持饥饿感或可延缓衰老 每日时讯
世界观点:国产电动车反攻欧洲 法国急忙出手限制:砍掉3.8万元补贴
迪卡侬双11促销虚标原价被罚!网友大赞:消费者苦假促销久矣-每日头条
史上最全 Activiti 学习教程,一文搞定最强工作流引擎! 天天快消息
可观测性三支柱?远不止此!|全球快播报
每日观察!Linux-特殊权限设置(SUID、SGID、SBIT)
智能补全音源损失!索尼蓝牙耳机暴降130元
“北向互换通”上线 人民币国际化再提速-资讯
国家统计局:4月份社会消费品零售总额同比增长18.4%
当前时讯:罕见!抗阿尔茨海默病“第二人”出现
速降35℃!黑鲨冰封散热背夹3 Pro预售 首销199元_当前热议
世界今日讯!4000元档良心所在 Redmi Book 14处理器公布:45W标压12代酷睿
16GB大内存稳了!iQOO Neo8 Pro官宣搭载性能铁三角 最资讯
世界新动态:就看这款了!蔚来全新ES6上市定档:“高端中型SUV天花板”登场
蔚来起诉网红索赔500万!公关总监:绝不姑息造谣、污蔑行为
尘埃歌词我的爱像尘埃在线试听 尘埃歌词我的爱像尘埃
pg_enterprise_views安装及使用
JS中的偏函数
虚拟机网络配置_全球资讯
天天即时看!华东医药:5月15日融资买入1046.79万元,融资融券余额9.64亿元
暴汗燃脂!腾讯首款体感健身应用《舞动极光》发布:手机+电视就能玩
速读:一键开盖 耐热抗摔:哈尔斯Tritan材质单手开盖水杯14.9元发车
《王者荣耀》第四款敦煌皮肤、八周年限定皮肤都来了_环球热门
多地气温超36℃ 今夏还会“热哭”吗?专家称没有去年热 今日热闻
技术不成熟 无人驾驶汽车在旧金山“疯狂搞事”:还拦不住-快消息
时讯:国家网信办:集中清理仿冒新闻单位、新闻主播账号10.7万个
狂神说ngnix笔记(附md文件下载链接)
前沿资讯!Upstart (UPST.US)向私人信贷商店Castlelake出售40亿美元消费分期贷款 股价涨超20%
今晚油价或迎年内“最大跌幅”!95号汽油有望回归7元时代
天天热门:当事人回应10万元买8套房:是特列但房价确实便宜 我买房只看价格
当前快报:50TB仅398元!国产小龙盘升级:新增联网模式AI聊天
张艺谋《满江红》最终票房45.44亿 位列中国影史第6位
焦点简讯:中银香港完成首批“北向互换通”交易
【读财报】科创板一季度业绩速览:近七成公司实现盈利 机械、通信等行业表现突出 今日聚焦
天天看点:我市统计承诺实践创新获评国家优秀案例
每日观察!俞敏洪:中国的农村不能凋敝 不能让农民打理农村
云南13亩小岛1元起拍引关注:网友直呼可以当岛主了
32岁女生相亲角因条件高被男子怼哭 上海有房、5万彩礼:网友吵翻