JavaScript中的Set、Map、WeakSet和WeakMap

JavaScript中的Set、Map、WeakSet和WeakMap是ES6中新增的数据结构,它们都提供了一种非常便捷和高效的方式来管理数据。在本文中,我们将介绍它们的基本概念以及常用方法,并提供一些示例代码。

Set

Set是一种无重复值的集合,它可以存储任何类型的值。Set中的值是唯一的,重复的值将被自动去重。下面是一些常用的Set方法:

  • add(value):向Set中添加一个新的值。
  • delete(value):从Set中删除一个值。
  • has(value):检查Set中是否存在某个值。
  • size:返回Set中值的数量。
  • clear():清空Set中的所有值。
  • forEach(callbackFn, thisArg):遍历Set中的每个值,并对其执行回调函数。

下面是一个使用Set的示例代码:

const set = new Set();set.add(1);     // 添加值1
set.add(2);     // 添加值2
set.add(3);     // 添加值3
set.add(2);     // 添加重复的值2,但不会被添加进Set中console.log(set.size);      // 输出3,Set中有3个唯一的值set.delete(2);  // 从Set中删除值2console.log(set.has(2));    // 输出false,Set中不再包含值2set.forEach((value) => {console.log(value);
});

Map

Map是一种键值对的集合,其中的键和值可以是任何类型。Map中的键是唯一的,重复的键将被覆盖。下面是一些常用的Map方法:

  • set(key, value):向Map中添加一个新的键值对。
  • get(key):获取指定键的值。
  • has(key):检查Map中是否存在某个键。
  • delete(key):从Map中删除指定键的键值对。
  • size:返回Map中键值对的数量。
  • clear():清空Map中的所有键值对。
  • forEach(callbackFn, thisArg):遍历Map中的每个键值对,并对其执行回调函数。

下面是一个使用Map的示例代码:

const map = new Map();map.set('name', 'John');    // 设置键'name'的值为'John'
map.set('age', 30);         // 设置键'age'的值为30
map.set('name', 'Jane');    // 重复设置键'name'的值为'Jane',会覆盖原有的值console.log(map.get('name'));      // 输出'Jane',获取键'name'的值console.log(map.has('age'));       // 输出true,Map中包含键'age'map.forEach((value, key) => {console.log(key + ': ' + value);
});

WeakSet

WeakSet是一种弱引用的集合,它只能存储对象类型的值。WeakSet中的值是唯一的,重复的值将被自动去重。WeakSet对值的引用是弱引用,当值不再被引用时,该值将被自动回收。因此,WeakSet不能被迭代,也没有方法可以获取WeakSet中的所有值。

下面是一个使用WeakSet的示例代码:

const weakSet = new WeakSet();const obj1 = { name: 'John' };
const obj2 = { name: 'Jane' };weakSet.add(obj1);    // 将obj1添加进WeakSet
weakSet.add(obj2);    // 将obj2添加进WeakSet
weakSet.add(obj1);    // 将重复的obj1添加进WeakSet,但不会被添加console.log(weakSet.has(obj1));  // 输出true,WeakSet中包含obj1weakSet.delete(obj1); // 从WeakSet中删除obj1console.log(weakSet.has(obj1));  // 输出false,WeakSet中不再包含obj1

WeakMap

WeakMap是一种弱引用的键值对的集合,其中的键是对象类型,值可以是任何类型。WeakMap中的键是唯一的,重复的键将被覆盖。WeakMap对键的引用是弱引用,当键不再被引用时,该键值对将被自动回收。因此,WeakMap不能被迭代,也没有方法可以获取WeakMap中的所有键值对。

下面是一个使用WeakMap的示例代码:

const weakMap = new WeakMap();const obj1 = {};
const obj2 = {};weakMap.set(obj1, 'value1');    // 设置键为obj1的值为'value1'
weakMap.set(obj2, 'value2');    // 设置键为obj2的值为'value2'
weakMap.set(obj1, 'value3');    // 重复设置键为obj1的值为'value3',会覆盖原有的值console.log(weakMap.get(obj1));      // 输出'value3',获取键为obj1的值console.log(weakMap.has(obj2));       // 输出true,WeakMap中包含键为obj2的键值对weakMap.delete(obj1); // 从WeakMap中删除键为obj1的键值对console.log(weakMap.has(obj1));  // 输出false,WeakMap中不再包含键为obj1的键值对

总结:

Set、Map、WeakSet和WeakMap是JavaScript中非常有用的数据结构,它们分别提供了无重复值的集合、键值对的集合、弱引用的集合和弱引用的键值对集合的功能。通过使用它们提供的方法,我们可以很方便地管理和操作数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/494965.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

注意力机制详解

一、引言 注意力机制(Attention Mechanism)源于对人类视觉的研究,是一种在深度学习模型中模拟人类注意力的机制。它允许模型在处理信息时能够聚焦于当前任务最相关的部分,从而提高模型的性能和泛化能力。本文将从注意力机制的起源…

重温设计模式--单例模式

文章目录 单例模式(Singleton Pattern)概述单例模式的实现方式及代码示例1. 饿汉式单例(在程序启动时就创建实例)2. 懒汉式单例(在第一次使用时才创建实例) 单例模式的注意事项应用场景 C代码懒汉模式-经典…

金仓数据库安装-Kingbase v9-centos

在很多年前有个项目用的金仓数据库,上线稳定后就没在这个项目了,只有公司的开发环境还在维护,已经好多年没有安装过了,重温一下金仓数据库安装,体验一下最新版本,也做一个新版本的试验环境; 一、…

LabVIEW中什么和C 语言指针类似?

在LabVIEW中,与C语言指针类似的概念是 引用 (Reference)。 引用在LabVIEW中主要用于以下几个方面: 数据引用:LabVIEW通过引用传递数据,而不是复制数据。通过引用,多个VIs可以共享数据而不需要复制整个数据结构&#xf…

医疗大模型威胁攻击下的医院AI安全:挑战与应对策略

一、引言 1.1 研究背景与意义 随着人工智能技术的迅猛发展,医疗大模型作为一种新兴的技术手段,正逐渐渗透到医疗领域的各个环节,为医疗服务的数字化转型带来了前所未有的机遇。从辅助诊断到疾病预测,从个性化治疗方案的制定到医疗资源的优化配置,医疗大模型展现出了巨大…

在 Vue3 项目中安装和配置 Three.js

简介 Three.js 是一个轻量级的 WebGL 封装库,用于在浏览器中渲染复杂的 3D 图形。它提供了便捷的 API,可以快速构建 3D 场景、对象和动画。 Vue.js 是一个渐进式 JavaScript 框架,擅长构建用户界面。其响应式数据绑定和组件系统使得复杂的交…

编译原理复习---正则表达式+有穷自动机

适用于电子科技大学编译原理期末考试复习。 1. 正则表达式 正则表达式(Regular Expression,简称regex或regexp)是一种用于描述、匹配和操作文本模式的强大工具。它由一系列字符和特殊符号组成,这些字符和符号定义了一种搜索模式…

漏洞检测工具:HOST头部攻击

HOST头部攻击 漏洞定义 Host头部字段在HTTP协议中用于指定请求所针对的域名,以便服务器能够正确地将请求路由到相应的Web应用程序。攻击者通过篡改HTTP请求中的Host头部字段来执行恶意操作。 漏洞危害 Host头部攻击的危害在于它能导致敏感信息泄露、恶意内容执行…

ROS1入门教程6:复杂行为处理

一、新建项目 # 创建工作空间 mkdir -p demo6/src && cd demo6# 创建功能包 catkin_create_pkg demo roscpp rosmsg actionlib_msgs message_generation tf二、创建行为 # 创建行为文件夹 mkdir action && cd action# 创建行为文件 vim Move.action# 定义行为…

DL作业11 LSTM

习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN),旨在解决普通 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。它通过设计多个门…

WWW23-多行为级联|级联图卷积网络的多行为推荐

论文:https://arxiv.org/abs/2303.15720 代码:https://github.com/SS-00-SS/MBCGCN 这篇论文MB-CGCN和上一篇CRGCN是同一个团队的,都是级联的方式。一个用了残差,一个用了特征转换,文章最后有discussion讨论了两者的不…

JAVA开发入门学习七- 数组

数组的概念 概念 数组: 是多个相同类型数据按照一定排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理 数组中的概念 数组名: 数组的名称,命名 下标: 从0开始 元素:…

【编辑器扩展】打开持久化路径/缓存路径/DataPath/StreamingAssetsPath文件夹

代码 [MenuItem("Assets/Open Explorer/PersistentDataPath")]public static void OpenPersistentDataPath(){Application.OpenURL(Application.persistentDataPath);}[MenuItem("Assets/Open Explorer/DataPath")]public static void OpenDataPath(){Appl…

链路聚合与GVRP的混合构建(eNSP)

目录 拓扑图: 前置操作: GVRP全局开启: 查询: 实验背景:前面依次搭建了交换机的链路聚合实验手册以及动态vlan GVRP,为了模拟真实环境,本次实验将两者结合。 拓扑图: 前置操作&…

由于这些关键原因,我总是手边有一台虚拟机

概括 虚拟机提供了一个安全的环境来测试有风险的设置或软件,而不会影响您的主系统。设置和保存虚拟机非常简单,无需更改主要设备即可方便地访问多个操作系统。运行虚拟机可能会占用大量资源,但现代 PC 可以很好地处理它,为实验和工作流程优化提供无限的可能性。如果您喜欢使…

华为ensp--BGP路由反射器

学习新思想、争做新青年,今天学习的是BGP路由反射器。 实验目的 理解BGP路由反射器的应用场景 理解BGP路由反射器的工作原理 掌握BGP路由反射器的基本配置方法 实验内容 本实验网络包含了两个AS,两个Cluster。R1、R2、R3属于Cluster 1&#xff0c…

使用idea创建JDK8的SpringBoot项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 使用idea创建JDK8的SpringBoot项目 前言我们经常在创建新的springboot项目,默认使用的是spring.io进行创建,但是它总是只会提供高版本的创建方式&…

初学stm32 --- 定时器中断

目录 时钟选择: 内部时钟选择​编辑 时钟计算方法: 计数器模式 向下计数模式(时钟分频因子1,ARR36) 向上计数模式(时钟分频因子1,ARR36) 中央对齐计数模式(时钟分频因…

windows下安装配置anaconda及常用的conda命令

Anaconda极大的简化了Python环境和库的管理,其最大的作用就是可以创建、管理多个不同python版本的虚拟环境,起到不同环境相互隔离、互不干扰、避免环境冲突的目的。如果使用本地Python安装多个包,经常会遇到包冲突,导致整个python…

安装CPU版的torch(清华源)

1、安装指令: pip3 install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple2、验证torch是否安装成功 // 使用python验证 import torch print(torch.__version__)能正常打印版本即表示安装成功,如下图