javascript中的set的用法

在 JavaScript 中,Set 是一种内置的数据结构,用于存储唯一值的集合。Set 对象允许你存储任意类型的值,无论是基本类型还是对象类型。以下是 Set 的常用方法和操作:

1. 创建一个 Set:

你可以通过 new Set() 来创建一个新的 Set 对象。
 

const mySet = new Set();

2. 向 Set 中添加元素:

使用 .add() 方法可以向 Set 中添加元素。

mySet.add(1);       // Set { 1 }
mySet.add(5);       // Set { 1, 5 }
mySet.add(1);       // Set { 1, 5 } (1 已经存在,不会重复添加)
mySet.add('hello'); // Set { 1, 5, 'hello' }

3. 检查 Set 中是否存在某个值:

使用 .has() 方法来检查一个值是否在 Set 中。

console.log(mySet.has(1));    // true
console.log(mySet.has(10));   // false

4. 删除 Set 中的元素:

使用 .delete() 方法可以删除某个元素。

mySet.delete(5);    // true
console.log(mySet); // Set { 1, 'hello' }

5. 获取 Set 的大小:

使用 .size 属性可以获得 Set 的元素数量。

console.log(mySet.size); // 2

6. 清空 Set:

使用 .clear() 方法可以清空 Set 中的所有元素。

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

7. 遍历 Set:

你可以使用 forEach()for...of 循环来遍历 Set

PS:[1, 2, 3, 'a', 'b']为一个数组。

const anotherSet = new Set([1, 2, 3, 'a', 'b']);// 使用 forEach 遍历
anotherSet.forEach(value => {console.log(value);
});// 使用 for...of 遍历
for (let value of anotherSet) {console.log(value);
}

8. Set 和数组的转换:

你可以很容易地将 Set 转换为数组,或者将数组转换为 Set

// Set 转换为数组
const setArray = [...anotherSet]; // [1, 2, 3, 'a', 'b']// 数组转换为 Set
const array = [1, 2, 2, 3, 4];
const arraySet = new Set(array); // Set { 1, 2, 3, 4 }

9. 去重数组中的重复值:

利用 Set 的唯一性,你可以快速去除数组中的重复项。

const numbers = [1, 2, 3, 3, 4, 5, 5];
const uniqueNumbers = [...new Set(numbers)]; // [1, 2, 3, 4, 5] 首先将数据转换为set,再将set转换为数组。

set和map的区别:

1. 存储类型

  • Set只存储唯一值,不存储键值对。每个元素都是一个值,且不能重复。

    const mySet = new Set(); 
    mySet.add(1); 
    mySet.add(2); 
    mySet.add(2); // 无法添加重复的值 
    console.log(mySet); // Set { 1, 2 }

  • Map:存储的是键值对。每个元素都有一个键和一个对应的值,键可以是任何类型(包括对象)。

    const myMap = new Map(); 
    myMap.set('key1', 'value1'); 
    myMap.set('key2', 'value2'); 
    console.log(myMap); // Map { 'key1' => 'value1', 'key2' => 'value2' }

2. 元素的唯一性

  • Set:不能存储重复的值。Set 会确保集合中的每个元素都是唯一的。

    const set = new Set([1, 1, 2, 3]); 
    console.log(set); // Set { 1, 2, 3 } (1 不会重复)

  • Map键必须是唯一的,但不同的键可以对应相同的值。Map 中允许重复的值,只要键不同。

    const map = new Map(); 
    map.set('a', 1); 
    map.set('b', 1); // 相同的值,键不同 
    console.log(map); // Map { 'a' => 1, 'b' => 1 }

3. 键和值的使用

  • Set:只有值,没有键。每个值在 Set 中都是唯一的元素。

    const set = new Set([1, 2, 3]); 
    set.forEach(value => console.log(value)); // 遍历的是值

  • Map:每个元素都有键和值,使用 .set(key, value) 来添加键值对,用 .get(key) 来获取对应的值。

    const map = new Map(); 
    map.set('name', 'Alice'); 
    map.set('age', 30); 
    console.log(map.get('name')); // 'Alice'

4. 迭代

  • Set:遍历 Set 时,你只能遍历值。

    const set = new Set([1, 2, 3]); 
    for (let value of set) { console.log(value); // 1, 2, 3 
    }

  • Map遍历 Map 时可以遍历键、值或者键值对。

    const map = new Map([['key1', 'value1'], ['key2', 'value2']]); // 遍历键 
    for (let key of map.keys()) { console.log(key); // key1, key2 
    } // 遍历值 
    for (let value of map.values()) { console.log(value); // value1, value2 
    } // 遍历键值对 
    for (let [key, value] of map.entries()) { console.log(key, value); // key1 value1, key2 value2 
    }

5. 方法

  • Set

    • .add(value):向 Set 中添加值。
    • .delete(value):删除 Set 中的值。
    • .has(value):检查 Set 中是否有某个值。
    • .clear():清空 Set
    • .size:获取 Set 的大小。
  • Map

    • .set(key, value):向 Map 中添加键值对。
    • .get(key):通过键获取对应的值。
    • .delete(key):删除某个键值对。
    • .has(key):检查 Map 中是否有某个键。
    • .clear():清空 Map
    • .size:获取 Map 的大小。

6. 使用场景

  • Set:适用于处理唯一值集合的场景,如数组去重、存储一组无重复的值。

    const uniqueValues = new Set([1, 2, 2, 3, 4]); // Set { 1, 2, 3, 4 }

  • Map:适用于需要键值对存储的场景,如缓存、字典、关联数组等。

    const dictionary = new Map(); 
    dictionary.set('apple', 'A fruit'); 
    dictionary.set('car', 'A vehicle');

总结:

  • Set 用于存储唯一的值集合,没有键。
  • Map 用于存储键值对,键和值都可以是任意类型。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

聚合数字力量,数字产业集团构建产业互联新平台!

在数字经济蓬勃发展的今天,数字产业集团正以其强大的聚合力,引领着一场前所未有的产业互联革命。近日,中国信息协会产业互联网分会发布的《中国产业互联网平台数据地图》显示,全国已有超过1000家产业互联网平台企业,覆…

Kubernetes简介与部署+Pod管理与优化

一、简介 1.基础信息 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年Borg系统运行管理着成干上万的容器应用。Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统…

易泊车牌识别在 4S 店的应用

在当今数字化时代,车牌识别技术正逐渐成为各个行业提高效率和服务质量的重要工具。其中,易泊车牌识别系统在 4S 店中发挥着重要作用。 一、快速车辆登记 当客户驾车来到 4S 店时,易泊车牌识别系统能够迅速识别车牌号码,自动将车辆…

GPT-SOVIT模型部署指南

一、模型介绍 强大的小样本语音转换和文本转语音 WebUI。 具有以下特征: 零样本 TTS: 输入 5 秒的声音样本并体验即时文本到语音的转换。少量样本 TTS: 仅使用 1 分钟的训练数据对模型进行微调,以提高语音相似度和真实感。跨语…

历时一个多月,搭建了一款培训考试小程序系统

前不久,一位在机构单位工作的朋友联系到我,说他们需要搭建一款内部培训考试系统,是关于安全知识学习与考试的。 此处省略好多张聊天页...... 为此,针对用户的需求,在搭建前,我做了大量的竞品分析&#xff…

MediaPlayer视频播放流程

MediaPlayer视频播放流程(基于Android8.0) 1. MediaPlayer源码分析 1.0 public class MediaPlayer extends PlayerBase implements SubtitleController.Listener, VolumeAutomation, AudioRoutingMediaPayer继承自PlayerBase类,分别实现了SubtitleController Volume…

带外管理卡虚拟控制台连接总结--持续更新

为避免维护服务器、小型机为连接虚拟控制台,采用的办法不对而导致浪费时间,特做以下总结: ##1、DELL PowerEdge R510 idrac 6(intergrated dell remote access contoller 6) server 2003 R2 SP2 用chomre 版本 47.0.2526.80 m打开https://…

C++:thread | condition_variable|mutex

欢迎来到 破晓的历程的 博客 ⛺️不负时光,不负己✈️ 文章目录 引言thread创建线程传递参数给线程函数 mutexmutex常见用法 condition_variable:条件变量生产消费模型 引言 相信大家在Linux系统编程中都接触过线程创建和退出的相关系统调用&#xff0…

【数据结构与算法】简单聊聊图数据的存储

文章目录 1. 邻接矩阵(Adjacency Matrix)2. 邻接表(Adjacency List)3. 邻接多重表4. 十字链表5. 图数据库(Graph Database) 存储图数据的方法主要有几种,每种方法都有其特定的应用场景和优缺点。…

毕业设计项目-古典舞在线交流平台的设计与实现(源码/论文)

项目简介 基于springboot实现的,主要功能如下: 技术栈 后端框框:springboot/mybatis 前端框架:html/JavaScript/Css/vue/elementui 运行环境:JDK1.8/MySQL5.7/idea(可选)/Maven3&#xff08…

什么是物联网nb水表?

物联网NB水表是一种利用NB-IoT(窄带物联网)技术实现远程数据传输的智能水表。这种水表不仅能够精确计量用户的用水量,还能通过无线通信技术实现数据的远程传输和管理。下面我们来详细介绍物联网NB水表的主要特点和功能。 一、基本概念 -定义:物联网NB水…

如何优化spotbugsXml.xml文件来方便debug的落地方案来了

不优化的spotbugsXml.xml 使用maven 构建来运行spotbugs的小伙伴都知道,执行完下面的命令后 mvn clean install -U spotbugs:spotbugs 会在默认的在target目录下生成一个spotbugsXml.xml 文件,而打开这个文件,想要debug里面的具体问题&am…

嵌入式面试——FreeRTOS篇(六) 任务通知

本篇为:FreeRTOS 任务通知篇 任务通知简介 1、任务通知介绍 答: 任务通知:用来通知任务的,任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值。 使用队列、信号量、事件标志组时都需要另外创建一个结构体&#xff0c…

Ubuntu终端配置

选择shell shell有很多,默认的是bash,一般就够用里,想要花里胡哨点就用zsh,还有最近比较火的fish 如果在刚开始安装完Ubuntu没有改shell,后面就不要改了。 安装的软件会设置环境变量,这些环境变量都是写入…

QDateTime 使用详解

QDateTime 是 Qt 框架中用于处理日期和时间的类。本篇文章详细介绍、通过示例 快速了解QDateTime的各种操作,包括: 当前时间、获取日期和时间、获取日期、获取时间、获取时间戳、格式化输出、年、月、日、QTime时间、获取微妙、操作日期和时间、添加时间、减去时间、…

无人机避障——4D毫米波雷达点云滤波去噪(四)

噪声的来源: 对于4D毫米波雷达的前后两帧点云数据进行去噪,可以采用多种方法。首先,需要了解点云数据的噪声来源,可能是由于硬件限制、环境干扰或目标本身的反射特性等因素造成的。噪声点通常包括漂移点、孤立点、冗余点和混杂点…

毕业设计项目——基于RISC-V的标签化跨层调度应用任务管理(论文/代码)

完整的论文代码见文章末尾 以下为核心内容 摘要 在现代操作系统中,高效的系统调度策略对于优化系统性能、提高资源利用率和保证系统稳定性至关重要。本文提出了一个基于Linux进程文件系统(procfs)的系统监控工具,旨在通过实时收…

Spring Cloud全解析:链路追踪之springCloudSleuth简介

文章目录 springCloudSleuth简介链路追踪?SpringCloudSleuth术语链路示意图zipkin依赖配置 springCloudSleuth简介 链路追踪? 什么是链路追踪?就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示&#xff…

算法:1、动态规划算法DP(Dynamic Programming)

算法介绍 动态规划(Dynamic Programming,DP)‌,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。它的关键思想是对于最终结果依赖前序步骤的问题,将结果定义为状态值dp,然后推导出后续步骤由…

深度学习常见问题

1.YOLOV5和YOLOV8的区别 YOLOv5 和 YOLOv8 是两个版本的 YOLO(You Only Look Once)目标检测算法,它们在网络架构、性能优化、功能扩展等方面有显著的区别。YOLOv5 是 YOLO 系列的重要改进版本,而 YOLOv8 是最新的一次重大升级&am…