当前位置: 首页 > news >正文

ES6 之 Set 与 Map 数据结构要点总结(一)

Set 数据结构

Set 对象允许你存储任何类型的唯一值,无论是原始值还是对象引用。

特性:

  • 所有值都是唯一的,没有重复。
  • 值的顺序是根据添加的顺序确定的。
  • 可以使用迭代器遍历 Set。

常用方法:
1. add(value):添加一个新值到 Set。
2. delete(value):从 Set 中移除一个值。
3. has(value):检查 Set 是否包含某个值。
4. clear():移除 Set 中的所有值。
5. size:返回 Set 中的元素数量。

示例:

let set = new Set();// 添加值
set.add(1);
set.add("hello");
set.add({ name: "Alice" });// 检查值是否存在
console.log(set.has(1)); // 输出:true
console.log(set.has("hello")); // 输出:true
console.log(set.has(2)); // 输出:false// 删除值
set.delete(1);
console.log(set.has(1)); // 输出:false// 遍历 Set
for (let item of set) {console.log(item);
}// 清空 Set
set.clear();
console.log(set.size); // 输出:0

Map 数据结构

Map 对象保存键值对的集合,其中键和值可以是任意类型。

特性:

  • 任何值(对象或原始值)都可以作为键或值。
  • 保持键的顺序,按照元素的插入顺序进行迭代。
  • 比对象更适合用作某些类型的键(如对象或函数)。

常用方法:

  1. set(key, value):将键和值存入 Map。
  2. get(key):根据键获取值。
  3. has(key):检查 Map 是否包含某个键。
  4. delete(key):根据键删除键值对。
  5. clear():移除 Map 中的所有键值对。
  6. size:返回 Map 中的元素数量。

示例:

let map = new Map();// 添加键值对
map.set("key1", "value1");
map.set(1, "number");
map.set({ name: "Bob" }, "object");// 通过键获取值
console.log(map.get("key1")); // 输出:value1
console.log(map.get(1)); // 输出:number// 检查键是否存在
console.log(map.has("key1")); // 输出:true
console.log(map.has(2)); // 输出:false// 删除键值对
map.delete(1);
console.log(map.has(1)); // 输出:false// 遍历 Map
for (let [key, value] of map) {console.log(`${key}: ${value}`);
}// 清空 Map
map.clear();
console.log(map.size); // 输出:0

扩展特性:

  • WeakSet 和 WeakMap:类似于 Set 和 Map,但是它们存储的键是弱引用,这意味着它们不会被垃圾回收机制考虑,如果外部没有对这些键的引用,它们会被自动回收。
    WeakSet 代码示例:
let weakSet = new WeakSet();let obj = {};
weakSet.add(obj);// 由于obj是唯一的,WeakSet不能添加重复的对象
console.log(weakSet.has(obj)); // 输出:true// 当obj没有被其他地方引用时,它会被垃圾回收
obj = null;
// weakSet中的obj也会被自动移除
console.log(weakSet.has(obj)); // 输出:false

WeakMap 代码示例:

let weakMap = new WeakMap();let keyObj = {};
weakMap.set(keyObj, "value");// 获取与键相关联的值
console.log(weakMap.get(keyObj)); // 输出:value// WeakMap中的键是弱引用,当keyObj没有被其他地方引用时,它会被垃圾回收
keyObj = null;
// weakMap中的键值对也会被自动移除
console.log(weakMap.get(keyObj)); // 输出:undefined

Set 和 Map 提供了现代的、高效的数据结构,适用于需要快速查找、添加和删除操作的场景。使用这些数据结构可以编写出更简洁、更高效的代码。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SLF4J的介绍与使用(有logback和log4j2的具体实现案例)
  • 提高交易决策质量,Anzo Capital昂首资本只需两个交易策略
  • java-spring boot光速入门教程(超详细!!)
  • java 实现人脸检测
  • Java后端开发(十三)-- Java8 stream的 orElse(null) 和 orElseGet(null)
  • 事务性消息
  • ts-01.泛型(函数和接口)
  • 列表渲染 v-for
  • 2.贪心算法.基础
  • 【零基础】学JS
  • Monaco 多行提示的实现方式
  • UE C++ 多镜头设置缩放 平移
  • SQLServer设置端口
  • Maven 分模块设计与开发 继承
  • Linux安装elasticsearch单机版
  • exif信息对照
  • HTTP--网络协议分层,http历史(二)
  • Mithril.js 入门介绍
  • nodejs实现webservice问题总结
  • node学习系列之简单文件上传
  • NSTimer学习笔记
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • React Transition Group -- Transition 组件
  • Spring Cloud中负载均衡器概览
  • Webpack 4 学习01(基础配置)
  • Zepto.js源码学习之二
  • 从重复到重用
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 离散点最小(凸)包围边界查找
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 用Visual Studio开发以太坊智能合约
  • 优秀架构师必须掌握的架构思维
  • 自制字幕遮挡器
  • ionic异常记录
  • #传输# #传输数据判断#
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #考研#计算机文化知识1(局域网及网络互联)
  • (+4)2.2UML建模图
  • (2020)Java后端开发----(面试题和笔试题)
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (免费领源码)python#django#mysql校园校园宿舍管理系统84831-计算机毕业设计项目选题推荐
  • (十八)SpringBoot之发送QQ邮件
  • (一)SpringBoot3---尚硅谷总结
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)大型网站的系统架构
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net MVC中使用angularJs刷新页面数据列表
  • .Net--CLS,CTS,CLI,BCL,FCL
  • .NET开源快速、强大、免费的电子表格组件
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • []error LNK2001: unresolved external symbol _m
  • [2016.7.Test1] T1 三进制异或