JS里对于集合的简单介绍

JS的集合

  • 前言
  • 一、集合
  • 二、基本使用
    • 1. 创建集合
    • 2. 添加元素
    • 3. 删除元素
    • 4. 检查元素
    • 5. 清空集合
    • 6. 集合的大小
  • 三、扩展使用
    • 1. 遍历集合
    • 2. 从数组创建集合
    • 3. 集合的应用场景
  • 四、总结


前言

JS里对于集合的简单介绍
同数学的集合,有无序性、唯一性

注意:无法获取某个元素的下标,因为无序性
所以对于某些情况:
例如:求两数之和时,需要使用到下标,此时不适合使用集合,可以使用Map


一、集合

在 JavaScript 中,集合(Set)是一种非常有用的数据结构,用于存储独特的值,这些值可以是原始值或对象引用。集合的主要特点是它保证了集合中所有的值都是唯一的,因此在处理需要去重的数据时非常有效。

二、基本使用

1. 创建集合

可以通过 new Set() 来创建一个新的集合

// 创建空集合
const set1 = new Set();// 用数组初始化集合
const set2 = new Set([1, 2, 3, 3]); // 自动去重,结果为{1, 2, 3}// 用字符串初始化
const set3 = new Set("hello"); // {"h", "e", "l", "o"}// 用DOM对象初始化
const lis = document.querySelectorAll('li');
const setLi = new Set(lis);

2. 添加元素

使用 add() 方法向集合中添加元素

mySet.add(1);
mySet.add(2);
mySet.add(3);
console.log(mySet); // Set { 1, 2, 3 }

如果尝试添加重复的元素,集合会自动忽略

mySet.add(2);
console.log(mySet); // Set { 1, 2, 3 },2 只会出现一次

3. 删除元素

使用 delete() 方法从集合中删除元素

mySet.delete(2);
console.log(mySet); // Set { 1, 3 }

4. 检查元素

可以使用 has() 方法检查集合中是否包含特定元素

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

5. 清空集合

使用 clear() 方法可以移除集合中的所有元素

mySet.clear();
console.log(mySet); // Set {}

6. 集合的大小

使用 size 属性可以获取集合中元素的数量:

const mySet = new Set(1, 2, 3)
console.log(mySet.size); // 3

三、扩展使用

1. 遍历集合

可以使用 forEach 方法或 for…of 循环遍历集合中的元素:

mySet.add(1);
mySet.add(2);mySet.forEach(value => {console.log(value); // 输出 1 和 2
});for (const value of mySet) {console.log(value); // 输出 1 和 2
}

2. 从数组创建集合

可以将数组传递给 Set 构造函数,以自动去重数组中的元素

const uniqueArray = new Set([1, 2, 2, 3, 4]);
console.log(uniqueArray); // Set { 1, 2, 3, 4 }

如果需要将集合转换重新为数组,可以使用 Array.from() 或扩展运算符( … )

const uniqueArrayBack = Array.from(uniqueArray);
console.log(uniqueArrayBack); // [1, 2, 3, 4]const uniqueArrayBack2 = [...uniqueArray];
console.log(uniqueArrayBack2); // [1, 2, 3, 4]

3. 集合的应用场景

  1. 去重: 当你需要从一个数组中去掉重复的元素时,可以使用 Set。
  2. 检查唯一性: 快速检查一个元素是否已经在集合中。
  3. 集合运算: Set 也可以被用来实现集合运算,例如交集、并集和差集等。

示例:集合运算
下面的示例展示了如何使用集合来计算两个数组的交集

function intersect(arr1, arr2) {const set1 = new Set(arr1);const set2 = new Set(arr2);const intersection = [];set2.forEach(value => {if (set1.has(value)) {intersection.push(value);}});return intersection;
}const array1 = [1, 2, 3, 4];
const array2 = [3, 4, 5, 6];
console.log(intersect(array1, array2)); // 输出: [3, 4]

四、总结

JavaScript 中的集合(Set)提供了一种简单且高效的方式来处理具有唯一特性的值。它的易用性和强大功能使其在处理数据去重、唯一性检查和集合运算等方面非常有用。通过掌握 Set 的基本特性和方法,可以在 JavaScript 编程中更好地处理数据。

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

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

相关文章

pytorch 反向传播

文章目录 概念计算图自动求导的两种模式 自动求导-代码标量的反向传播非标量变量的反向传播将某些计算移动到计算图之外 概念 核心:链式法则 深度学习框架通过自动计算导数(自动微分)来加快求导。 实践中,根据涉及号的模型,系统会构建一个计…

Kotlin日常使用函数记录

文章目录 前言字符串集合1.两个集合的差集2.集合转数组2.1.集合转基本数据类型数组2.2.集合转对象数组 Map1.合并Map1.1.使用 操作符1.2.使用 操作符1.3.使用 putAll 方法1.4.使用 merge 函数 前言 记录一些kotlin开发中,日常使用的函数和方式之类的,…

详解正则表达式中的?:、?= 、 ?! 、?<=、?<!

1、?: - 非捕获组 语法: (?:pattern) 作用: 创建一个分组但不捕获匹配结果,不会将匹配的文本存储到内存中供后续使用。 优势: 提高性能和效率 不占用编号(不会影响后续捕获组的编号) 减少内存使用 // 使用捕获组 let regex1 /(hell…

【无标题】spark编程

Value类型: 9) distinct ➢ 函数签名 def distinct()(implicit ord: Ordering[T] null): RDD[T] def distinct(numPartitions: Int)(implicit ord: Ordering[T] null): RDD[T] ➢ 函数说明 将数据集中重复的数据去重 val dataRDD sparkContext.makeRDD(Lis…

GPT-2 语言模型 - 模型训练

本节代码是一个完整的机器学习工作流程,用于训练一个基于GPT-2的语言模型。下面是对这段代码的详细解释: 文件目录如下 1. 初始化和数据准备 设置随机种子 random.seed(1002) 确保结果的可重复性。 定义参数 test_rate 0.2 context_length 128 tes…

架构师面试(二十九):TCP Socket 编程

问题 今天考察网络编程的基础知识。 在基于 TCP 协议的网络 【socket 编程】中可能会遇到很多异常,在下面的相关描述中说法正确的有哪几项呢? A. 在建立连接被拒绝时,有可能是因为网络不通或地址错误或 server 端对应端口未被监听&#x…

HTTP实现心跳模块

HTTP实现心跳模块 使用轻量级的cHTTP库cpp-httplib重现实现HTTP心跳模块 头文件HttplibHeartbeat.h #ifndef HTTPLIB_HEARTBEAT_H #define HTTPLIB_HEARTBEAT_H#include <string> #include <thread> #include <atomic> #include <chrono> #include …

openharmony—release—4.1开发环境搭建(踩坑记录)

环境开发需要分别在window以及ubuntu下进行相应设置 一、window 1.安装DevEco Device Tool OpenAtom OpenHarmony 二、ubuntu 1.将Ubuntu Shell环境修改为bash ls -l /bin/sh 2.打开终端工具&#xff0c;执行如下命令&#xff0c;输入密码&#xff0c;然后选择No&#xff0…

Go学习系列文章声明

本次学习是基于B站的视频&#xff0c;【Udemy高分热门付费课程】Golang&#xff1a;完整开发者指南&#xff08;基础知识和高级特性&#xff09;中英文字幕_哔哩哔哩_bilibili 本人会尝试输出视频中的内容&#xff0c;如有错误欢迎指出 next page: Go installation process

error: RPC failed; HTTP 408 curl 22 The requested URL returned error: 408

在git push时报错&#xff1a;error: RPC failed; HTTP 408 curl 22 The requested URL returned error: 408 原因&#xff1a;可能是推送的文件太大&#xff0c;要么是缓存不够&#xff0c;要么是网络不行。 解决方法&#xff1a; 将本地 http.postBuffer 数值调整到500MB&…

Android.bp中添加条件判断编译方式

背景&#xff1a; 马哥学员朋友以前在vip群里&#xff0c;有问道如何在Android.bp中添加条件判断&#xff0c;在工作中经常需要一套代码兼容发货目标版本&#xff0c;即代码都是公共的一套&#xff0c;但是需要用这一套代码集成到各个产品设备上 但是这个产品设备可能面临比…

swift ui基础

一个朴实无华的目录 今日学习内容&#xff1a;1.三种布局&#xff08;可以相互包裹&#xff09;1.1 vstack&#xff08;竖直&#xff09;&#xff1a;先写的在上面1.1 hstack&#xff08;水平&#xff09;&#xff1a;先写的在左边1.1 zstack&#xff08;前后&#xff09;&…

第16届蓝桥杯单片机模拟试题Ⅲ

试题 代码 sys.h #ifndef __SYS_H__ #define __SYS_H__#include <STC15F2K60S2.H> //sys.c extern unsigned char UI; //界面标志(0湿度界面、1参数界面、2时间界面) extern unsigned char time; //时间间隔(1s~10S) extern bit ssflag; //启动/停止标志…

Node.js中URL模块详解

Node.js 中 URL 模块全部 API 详解 1. URL 类 const { URL } require(url);// 1. 创建 URL 对象 const url new URL(https://www.example.com:8080/path?queryvalue#hash);// 2. URL 属性 console.log(协议:, url.protocol); // https: console.log(主机名:, url.hos…

Java接口性能优化面试问题集锦:高频考点与深度解析

1. 如何定位接口性能瓶颈&#xff1f;常用哪些工具&#xff1f; 考察点&#xff1a;性能分析工具的使用与问题定位能力。 核心答案&#xff1a; 工具&#xff1a;Arthas&#xff08;在线诊断&#xff09;、JProfiler&#xff08;内存与CPU分析&#xff09;、VisualVM、Prometh…

WheatA小麦芽:农业气象大数据下载器

今天为大家介绍的软件是WheatA小麦芽&#xff1a;专业纯净的农业气象大数据系统。下面&#xff0c;我们将从软件的主要功能、支持的系统、软件官网等方面对其进行简单的介绍。 主要内容来源于软件官网&#xff1a;WheatA小麦芽的官方网站是http://www.wheata.cn/ &#xff0c;…

Python10天突击--Day 2: 实现观察者模式

以下是 Python 实现观察者模式的完整方案&#xff0c;包含同步/异步支持、类型注解、线程安全等特性&#xff1a; 1. 经典观察者模式实现 from abc import ABC, abstractmethod from typing import List, Anyclass Observer(ABC):"""观察者抽象基类""…

CST1019.基于Spring Boot+Vue智能洗车管理系统

计算机/JAVA毕业设计 【CST1019.基于Spring BootVue智能洗车管理系统】 【项目介绍】 智能洗车管理系统&#xff0c;基于 Spring Boot Vue 实现&#xff0c;功能丰富、界面精美 【业务模块】 系统共有三类用户&#xff0c;分别是&#xff1a;管理员用户、普通用户、工人用户&…

Windows上使用Qt搭建ARM开发环境

在 Windows 上使用 Qt 和 g++-arm-linux-gnueabihf 进行 ARM Linux 交叉编译(例如针对树莓派或嵌入式设备),需要配置 交叉编译工具链 和 Qt for ARM Linux。以下是详细步骤: 1. 安装工具链 方法 1:使用 MSYS2(推荐) MSYS2 提供 mingw-w64 的 ARM Linux 交叉编译工具链…

Python爬虫教程011:scrapy爬取当当网数据开启多条管道下载及下载多页数据

文章目录 3.6.4 开启多条管道下载3.6.5 下载多页数据3.6.6 完整项目下载3.6.4 开启多条管道下载 在pipelines.py中新建管道类(用来下载图书封面图片): # 多条管道开启 # 要在settings.py中开启管道 class DangdangDownloadPipeline:def process_item(self, item, spider):…