javaScript set和map

目录

  • 一、介绍
  • 二、Set
    • 1.Set 的基本操作
    • 2.Set 示例
    • 3.Set 迭代器
  • 三、Map
    • 1.Map 的基本操作
    • 2.Map 示例
    • 3.Map 迭代器
  • 四、Set vs. Map


一、介绍

当你在开发 JavaScript 应用程序时,您通常需要处理数据。Set 和 Map 是两种非常有用的 JavaScript 数据结构,可以帮助您轻松地存储和访问数据。在本篇文章中,我们将深入探讨 Set 和 Map,让您了解这两种数据结构的基本概念、用法以及各自的优势。

二、Set

Set 是一个由一组唯一且不重复的值组成的数据结构,它可以存储任何类型的值,包括原始类型和对象引用。Set 中的值按照插入的顺序排序,并且可以通过迭代器按顺序访问。由于 Set 中的值是唯一的,因此您可以使用 Set 来从数组或其他数据源中轻松地过滤重复的值。

1.Set 的基本操作

以下是一些常用的 Set 操作:

  1. add(value):将一个值添加到 Set 中。
  2. has(value):检查 Set 中是否存在一个值。
  3. delete(value):从 Set 中删除一个值。
  4. clear():清空 Set。

2.Set 示例

下面是一个使用 Set 的简单示例:

javascript
Copy code
const mySet = new Set();
mySet.add('apple');
mySet.add('banana');
mySet.add('orange');
mySet.add('apple'); // 不会重复添加

console.log(mySet.size); // 3
console.log(mySet.has('banana')); // true

mySet.delete('orange');
console.log(mySet.size); // 2

mySet.clear();
console.log(mySet.size); // 0

在上述示例中,我们创建了一个新的 Set 实例,并向其中添加了几个字符串值。我们使用了 size 属性来获取 Set 中值的数量,并使用 has() 方法来检查 Set 中是否存在一个特定的值。我们还使用了 delete() 方法删除了一个值,并使用 clear() 方法清空整个 Set。

3.Set 迭代器

Set 迭代器允许您按照插入顺序遍历 Set 中的值。以下是一些常用的 Set 迭代器:

values():返回一个包含 Set 中所有值的迭代器,按照插入顺序排列。
keys():返回一个与 values() 方法相同的迭代器,仅用于兼容 Map。
entries():返回一个包含 Set 中每个元素键值对的迭代器,其中键和值相等。在 Set 中,键和值相等是因为每个元素都是唯一的。
forEach(callbackFn, thisArg):对 Set 中的每个元素执行回调函数,可选地提供 thisArg 参数来指定回调函数中的 this 上下文。

以下是一个使用 Set 迭代器的示例:

javascript
Copy code
const mySet = new Set();
mySet.add('apple');
mySet.add('banana');
mySet.add('orange');

// 使用 values() 迭代器遍历 Set
for (const value of mySet.values()) {
  // 输出元素值
console.log(value);
}
// 使用 entries() 迭代器遍历 Set
for (const [key, value] of mySet.entries()) {
console.log(key, value);
}

// 使用 forEach() 方法遍历 Set
mySet.forEach((value, key, set) => {
console.log(value, key, set);
});

在上述示例中,我们使用 values() 方法返回一个迭代器,遍历 Set 中的值并输出它们。我们还使用 entries() 方法返回一个迭代器,遍历 Set 中的键值对并输出它们。最后,我们使用 forEach() 方法对 Set 中的每个元素执行回调函数,并输出它们的值、键和整个 Set 对象。

三、Map

Map 是一种键值对集合,其中每个元素由一个键和一个值组成。键可以是任何类型,值也可以是任何类型,包括原始类型和对象引用。Map 中的元素没有固定的顺序,但可以通过迭代器按插入顺序或其他方式访问。

1.Map 的基本操作

以下是一些常用的 Map 操作:

  • set(key, value):将一个键值对添加到 Map 中。
  • get(key):获取一个键对应的值。
  • has(key):检查 Map 中是否存在一个键。
  • delete(key):从 Map 中删除一个键值对。
  • clear():清空 Map。

2.Map 示例

下面是一个使用 Map 的简单示例:

const myMap = new Map();
myMap.set('apple', 1);
myMap.set('banana', 2);
myMap.set('orange', 3);
myMap.set('apple', 4); // 覆盖已有的值

console.log(myMap.size); // 3
console.log(myMap.get('banana')); // 2

myMap.delete('orange');
console.log(myMap.size); // 2

myMap.clear();
console.log(myMap.size); // 0

在上述示例中,我们创建了一个新的 Map 实例,并向其中添加了几个键值对。我们使用了 size 属性来获取 Map 中键值对的数量,并使用 get() 方法来获取一个键对应的值。我们还使用了 delete() 方法删除了一个键值对,并使用 clear() 方法清空整个 Map。

3.Map 迭代器

Map 迭代器允许您按照插入顺序或其他方式遍历 Map 中的键值对。以下是一些常用的 Map 迭代器:

  1. keys():返回一个包含 Map 中所有键的迭代器,按照插入顺序排列。
  2. values():返回一个包含 Map 中所有值的迭代器,按照插入顺序排列。
  3. entries():返回一个包含 Map 中每个元素键值对的迭代器,按照插入顺序排列。
  4. forEach(callbackFn, thisArg):对 Map 中的每个元素执行回调函数,可选地提供 thisArg 参数来指定回调函数中的 this 上下文

以下是一个使用 Map 迭代器的示例:

const myMap = new Map();
myMap.set('apple', 1);
myMap.set('banana', 2);
myMap.set('orange', 3);

// 使用 keys() 迭代器遍历 Map
for (const key of myMap.keys()) {
  console.log(key);
}

// 使用 values() 迭代器遍历 Map
for (const value of myMap.values()) {
  console.log(value);
}

// 使用 entries() 迭代器遍历 Map
for (const [key, value] of myMap.entries()) {
  console.log(key, value);
}

// 使用 forEach() 方法遍历 Map
myMap.forEach((value, key, map) => {
  console.log(value, key, map);
});

四、Set vs. Map

Set 和 Map 都提供了一种简单和高效的方式来存储和操作数据。它们都具有添加、删除、清空等基本操作,以及迭代器等用于访问元素的方法。但是,Set 和 Map 在某些方面也有所不同:

  • Set 是一组唯一且不重复的值的集合,而 Map 是一种键值对集合。
  • 在 Set 中,每个元素都是值;在 Map 中,每个元素都是一个键值对。
  • 在 Set 中,元素按照插入顺序排列;在 Map 中,元素没有固定的顺序,但可以通过迭代器按插入顺序或其他方式访问。
  • 在 Set 中,值本身就是元素的唯一标识;在 Map 中,键是元素的唯一标识。

因此,您可以根据需要选择使用 Set 或 Map。如果您只需要一个集合,而不需要键值对,那么 Set 可能更适合。如果您需要存储键值对,那么 Map 是一个很好的选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于OpenAI的DALL的一点使用心得

文章目录注册DALL使用根据描述来generate上传图片来generate也可以根据描述信息或者相似的图片来进行设计注册DALL https://openai.com/product/dall-e-2 使用 根据描述来generate surprise me 自动生成描述(因为每个月只有15个免费credits,节省起见…

java面试题(持续更新)

java面试题(持续更新) java 基础 java面向对象有哪些特征 面向对象的三大特征:封装、继承、多态 封装:隐藏了类的内部实现机制,可以在不影响使用的情况下改变类的内部结构,同时也保护了数据,…

Microsoft Dynamics 365 Business Central Planning Worksheet中Action Message状态变化

学习目标: 掌握Planning Worksheet中Action Message状态变化 学习内容: 掌握 创建物料,工作中心,工艺路线,BOM,物料和工艺路线,BOM的关联掌握 按订单的生产的物料卡片设置掌握 创建销售订单并…

二叉树的5个性质【要点:完全二叉树的性质】

只讲不会的 普通二叉树就要讲排列顺序了!!! 预备:满二叉树:1.前提是它必须是二叉树 2.每个结点(除了终端结点外)都是2个子女。 要点1:关于普通的树的结点的计算&#xff0…

【CocosCreator入门】CocosCreator组件 | Label(文本)组件

Cocos Creator 是一款流行的游戏开发引擎,具有丰富的组件和工具,其中Label组件是最常用的之一。Label 组件是一个用于显示文本的 UI 组件。在本文中,我们将探讨 Label 组件的一些技术方面,包括如何创建、配置和使用它。 目录 一、…

java的集合体系结构(以及集合的遍历方式)

文章目录java集合的体系结构遍历方式通用(三种):迭代器,增强for,lambda表达式遍历迭代器(不依赖索引,适合set集合遍历)java集合的体系结构 注意点: Col1 ection是一个接口,我们不能直接创建他的对象。 所以,现在我们学习他的方法时&#xff0…

【数据库管理】①实例与数据库

1.Oracle RDBMS 架构图 2. Oracle 体系结构 由此区分database和instance的区别 No.1.oracle serverdatabase instance2.databasedata file、control file、redo log file3.instancean instance accesses a database4.oracle memorySGA PGA(oracle的内存结构)5.instanceSGA …

用C语言写一个函数,把字符串转换成整数

这是一个很有意思的问题。请不要把这个问题想的太简单了,考虑问题时应该尽可能的全面一些。请先思考并且实现这个函数,再来看讲解。 分析一下:函数名是StrToInt,那么可以这么调用: int ret StrToInt("1234&quo…

前端后端交互系列之Jquery下的Ajax

目录前言Jquery发送Ajax请求1. 引入jquery文件2. 页面结构3. 发送get请求4. 发送post请求5. 通用方法总结前言 本篇文章讲解的是Jquery下的Ajax。Jquery到现今用的不是很多,但是会有老的项目依旧使用Jquery,所以了解用Jquery实现利用ajax进行交互是有必…

SpringCloud微服务技术栈.黑马跟学(十二)

SpringCloud微服务技术栈.黑马跟学 十二今日目标服务异步通信-高级篇1.消息可靠性1.1.生产者消息确认1.1.1.修改配置1.1.2.定义Return回调1.1.3.定义ConfirmCallback1.2.消息持久化1.2.1.交换机持久化1.2.2.队列持久化1.2.3.消息持久化1.3.消费者消息确认1.3.1.演示none模式1.3…

蓝桥杯刷题冲刺 | 倒计时6天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.凑数2.砝码称重1.凑数 题目 链接: 4941. 凑数 - AcWing题库 初始时,n0…

CesiumForUnreal实现贴地面(SurfacePolygon)效果

文章目录 1.实现目标2.实现过程2.1 材质实例2.2 Cartographic Polygon2.3 Runtime环境使用2.4 效果测试2.5 遇到的UE崩溃问题与解决3.参考资料1.实现目标 基于UE5的Cesium-Unreal插件添加在线世界地形Cesium World Terrain,在地形表面绘制Polygon面,并使其紧贴地形,实现贴地…

实验四 配置OSPF协议

目录 一、实验内容 二、实验环境 三、实验步骤 一、实验内容 在配置NAT实验的基础上,增加R0到R1的GRE VPN隧道,并将10.0.0.0/24网络和192.168.0.0/24网络通过GRE隧道192.168.2.0/24网络连通,使用OSPF协议路由,使得PC2能访问PC0…

MongoDB - 索引知识

索引简介 什么是索引 索引最常用的比喻就是书籍的目录,查询索引就像查询一本书的目录。 索引支持 MongoDB 查询的高效执行。如果没有索引,MongoDB 必须扫描集合中每一个文档,以选择与查询语句相匹配的文档。如果查询存在适当的索引&#x…

深入学习JavaScript系列(七)——Promise async/await generator

本篇属于本系列第七篇 第一篇:#深入学习JavaScript系列(一)—— ES6中的JS执行上下文 第二篇:# 深入学习JavaScript系列(二)——作用域和作用域链 第三篇:# 深入学习JavaScript系列&#xff…

ChatGPT探索系列之二:学习GPT模型系列的发展历程和原理

文章目录前言一、GPT的起源GPT系列二、GPT的原理1. GPT原理:自注意2. GPT原理:位置编码3. GPT原理:Masked Language Modeling4. GPT原理:预训练5. GPT原理:微调6. GPT原理:多任务学习三、GPT模型的风险与挑…

二叉搜索树BST的学习

文章目录二叉搜索树BST什么是BST?用BST做什么?一、BST的特性BST的特性是什么?1.[230. 二叉搜索树中第K小的元素](https://leetcode.cn/problems/kth-smallest-element-in-a-bst/)2.[538. 把二叉搜索树转换为累加树](https://leetcode.cn/prob…

Git Commit Message 应该怎么写?

原文链接: Git Commit Message 应该怎么写? 最近被同事吐槽了,说我代码提交说明写的太差。其实都不用他吐槽,我自己心里也非常清楚。毕竟很多时候犯懒,都是直接一个 -m "fix" 就提交上去了。 这样做是非常…

C语言变量

C 变量 变量其实只不过是程序可操作的存储区的名称。C 中每个变量都有特定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。 变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下…

机器学习-卷积神经网络CNN中的单通道和多通道图片差异

背景 最近在使用CNN的场景中,既有单通道的图片输入需求,也有多通道的图片输入需求,因此又整理回顾了一下单通道或者多通道卷积的差别,这里记录一下探索过程。 结论 直接给出结论,单通道图片和多通道图片在经历了第一…