使用JavaScript了解集合
如果您了解如何使用集合,它们可能会非常强大。 集合的一些应用包括解决计数问题,您可能希望找到将元素分组在一起的方式数量。
另一个应用程序是需要您查找元素之间关系的问题。 ECMAScript规范不包括以这种方式对集合进行操作的方法。 但是可以创建自己的。
以下是集合理论与实际应用程序的概述,可用于扩展JavaScript的功能并解决更复杂的问题。
内容
- 基本
- 联盟
- 路口
- 区别
- 对称差异
- 补充
- 评论
基本
集合是所有唯一元素的无序集合。 例如,您工作中所有员工的列表都是一组。 每个员工都是集合中的一个元素。 实际上,这些元素将使用ID或社会安全号码存储,因为我们可以确保这些值是唯一的。 请注意,这些元素的顺序与我们无关,因为对ID或社会安全号码进行排序没有意义。
我们称员工为通用集,因为它包含所有正在考虑的要素。 让我们想象另一组。 此集合是贵公司在工程部门工作的员工列表。 这是我们员工集中的子集,因为工程集中的每个元素也都存在于员工集中。 另一个子集是自由承包商的雇员列表。 这是我们如何在JavaScript中创建这些集合的方法:
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
let freelancers = new Set(['Piccolo','Trunks', 'Vegeta', 'Goku', 'Gohan']);
如果要在我们的集合中添加另一个人,我们将使用语法set.add(value)
并将set
替换为我们的集合名称,并将value
替换为要添加的元素的值。 如果我们尝试添加集合中已经存在的元素,则不会添加该元素。 例:
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
engineering.add('Gohan');
console.log(engineering);
这将打印Set {'Alberta','Dr. Gero”,“ Trunks”,“ Bulma”,“ Gohan”}。
现在,您可能在想什么呢? 我该怎么办? 接下来,我们将看到如何在电视机上进行操作以帮助解决一些常见问题。
联盟
如果我们想找到公司的所有自由职业者或工程部门工作人员,该怎么办? 我们需要将这两个集合结合起来,然后删除所有重复的名称。 这称为工会。
两个集合的并集是包含两个集合或两个集合中的元素的集合。 请注意,我们的工程集中的元素如何也位于自由职业者集中。 这是找到两个集合的并集的一种方法:
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
let freelancers = new Set(['Piccolo','Trunks', 'Vegeta', 'Goku', 'Gohan']);
let union = new Set([...engineering, ...freelancers]);
console.log(union);
...
运算符将我们的集合变成一个数组,然后将两个数组组合在一起, Set
构造函数将删除重复的元素。 这两个集合的并集将是Set {'Alberta','Dr. Gero”,“ Trunks”,“ Bulma”,“ Gohan”,“ Piccolo”,“ Vegeta”,“ Goku”}。
任务
集[1、3、5、7、9]和[2、3、4、6]的并集是什么?
路口
假设我们想找到所有在工程部门并且是自由职业者的雇员。 这是集合的交集。 两个集合的交集是两个集合中都包含元素的集合。
为了重现这一点,我们可以搜索一个集合并检查每个元素是否在另一个集合中。 要检查元素是否在集合中,我们使用has
方法。 例:
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
console.log(engineering.has('Alberta'));
这将返回true。 使用has
方法,我们可以为自由职业者集中的项目过滤工程集。
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
let freelancers = new Set(['Piccolo','Trunks', 'Vegeta', 'Goku', 'Gohan']);
let intersection = new Set([...engineering].filter(x => freelancers.has(x)));
console.log(intersection);
工程和自由职业者的交集是Set {'Trunks','Gohan'}。
任务
集合[1、3、5、7、9]和[2、3、4、6]的交集是什么?
区别
让我们考虑要找到不是自由职业者的工程师的情况。 这是区别。 两组的区别在于,该组包含第一组中的元素,但第二组中没有。
对我们来说,这意味着我们将从工程集开始,然后删除自由职业者集中的所有元素。 例:
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
let freelancers = new Set(['Piccolo','Trunks', 'Vegeta', 'Goku', 'Gohan']);
let difference = new Set([...engineering].filter(x => !freelancers.has(x)));
console.log(difference);
工程组和自由职业者组的区别是Set {'Alberta','Dr. Gero”,“布尔玛”}。 如果要获取是自由职业者而非工程师的人员的列表,请从自由职业者集合开始,然后删除出现在工程师集合中的元素。 例:
let difference = new Set([...freelancers].filter(x => !engineering.has(x)));
console.log(difference);
这给了我们不同的结果。 自由职业者集和工程集的区别是集{'Piccolo','Vegeta','Goku'}。
任务
求出[1、3、5、7、9]和[2、3、4、6]的差。
求出[2,3,4,6]和[1,3,5,7,9]的差。
对称差异
现在,我们想找到公司中的谁是工程师还是自由职业者,但不能两者兼而有之。 这是对称差异。 两组的对称差异是包含两个组中的一个元素但不包含两个元素的组。
我们可以使用的一种方法是找到两个集合的总和(工程师,自由职业者或两者兼有的每个人),然后减去交集(既是工程师又是自由职业者的所有人)。 结合我们先前使用的技术,我们可以使用以下代码获得对称差异:
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
let freelancers = new Set(['Piccolo','Trunks', 'Vegeta', 'Goku', 'Gohan']);
let union = new Set([...engineering, ...freelancers]);
let intersection = new Set([...engineering].filter(x => freelancers.has(x)))
let symmetricDifference = new Set([...union].filter(x => !intersection.has(x)));
console.log(symmetricDifference);
我们的工程组和自由职业者组的对称差异为Set {'Alberta','Dr. Gero”,“布尔玛”,“ Piccolo”,“ Vegeta”,“ Goku”}。
任务
求出[1、3、5、7、9]和[2、3、4、6]的对称差。
补充
如果我们有一组员工和一组工程师,那么如何找到所有不是工程师的人员呢? 我们可以做的一件事是从员工组中减去工程师组。 此集合是对我们的工程师集合(相对于我们的员工集合)的补充。 例:
let employees = ['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan', 'Goku', 'Piccolo', 'Vegeta'];
let engineering = new Set(['Alberta', 'Dr. Gero', 'Trunks', 'Bulma', 'Gohan']);
let complement = new Set([...employees].filter(x => !engineering.has(x)));
console.log(complement);
与员工集相关的工程集的补充是集{'Goku','Piccolo','Vegeta'}。
任务
给定通用集[1、2、3、4、5、6、7、8、9、10],找到要设置[2、4、6、8、10]的补码。
评论
当您需要比较不同的列表,合并列表或在列表中查找唯一元素时,集合会派上用场。 下次遇到需要以这种方式分析数据的问题时,请考虑使用上述设置操作之一。 以下是讨论的关键术语的列表:
- 集合:唯一,无序元素的集合。
- 通用集:集合中所有可能的元素。
- 子集:集合中的较小集合。
- 集A和B的并集:包含A,B或两者中的元素的集。
- 集A和B的交集:该集合包含A和B中的元素。
- 集A和B的区别:该集包含A中的元素,但B中不包含元素。
- 集A和B的对称差异:该集包含A或B中的元素,但不能同时包含两者。
- 集A的补集:通用集中不在A中的元素。
与往常一样,请记住,如果您正在寻找其他资源来学习或在工作中使用,请查看我们在Envato市场中可用的资源 。
翻译自: https://code.tutsplus.com/tutorials/understanding-sets-with-javascript--cms-29789
使用JavaScript了解集合相关推荐
- JavaScript常见集合操作
JavaScript常见集合操作 集合的遍历 FOR循环(效率最高) 优点:JavaScript最普遍的for循环,执行效率最高 缺点:无法遍历对象 for(let i=0;i<array.le ...
- JavaScript:集合与数组,重要但你不知道的ES6数据类型
全文共3313字,预计学习时长10分钟 图源:Unsplash Set(集合)对象类型于2015年在ECMAScript*规范中提出,可以在 Node.js和大部分浏览器中使用. *ECMA是Euro ...
- JavaScript大集合笔记
JavaScript 一.JavaScript简介 1. 什么是JavaScript? JavaScript简称JS,由网景分公司开发的客户端脚本语言,不需要编译,可以直接执行 补充: 机器语言(0, ...
- JavaScript 散集合(HashArray)
散列表和散列映射是一样的,我们已经在本章中介绍了这种数据结构. 在一些编程语言中,还有一种叫作散列集合的实现.散列集合由一个集合构成,但是插入. 移除或获取元素时,使用的是散列函数.我们可以重用本章中 ...
- 高性能Javascript HTML集合访问的学习笔记
HTML集合是包含了DOM节点引用的类数组对象. document.getElementsByTagName(); document.images document.links document. ...
- JavaScript数据结构——集合(Set)
概念和结构 集合里面的元素不能重复. 集合里面的元素只有值. 不包含任何元素的集合叫空集. 集合的操作 集合有九种常用操作,分别为 检查元素是否存在 has(element) 添加元素 add(ele ...
- javaScript技巧集合
事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture(); event.srcE ...
- 推荐11个实用的JavaScript库
作者 | Jonathan Saring 编辑 | 无明 JavaScript 仍然是 2018 年最受欢迎和使用最为广泛的编程语言,因此 JavaScript 生态系统也会继续发展壮大. 然而,Ja ...
- 如何在JavaScript中使用when()有条件地更改值
30 Seconds of Code is a brilliant collection of JavaScript snippets, digestible in ≤ 30 seconds. Any ...
最新文章
- php7安装执行configure报错error: off_t undefined; check your library configuration
- 【泛型】Generic 参数化类型 类型转换
- 《数据库SQL实战》从titles表获取按照title进行分组
- php获取随机图片,PHP 随机显示某张图片
- 代言男科、站台微商、变身神棍....这些科学家被捧了几十年,黑历史曝光后,让人三观尽毁......
- 前端学习(1997)vue之电商管理系统电商系统之渲染tab栏标签
- python dataframe删除重复行_详解pandas使用drop_duplicates去除DataFrame重复项参数
- Java虚拟机-第二篇-GC算法与内存分配策略
- OpenCV实战5: LBP级联分类器实现人脸检测
- HttpClient 使用证书访问https站点
- 翻译Java虚拟机的结构
- sublime运行python_sublime交互执行python文件方法
- 三角网导线平差实例_导线三角网平差计算中的Wd是什么意思啊?怎么的算出来的?...
- 小型产生式系统——昆虫识别
- 外接西数固态硬盘linux,外接固态硬盘安装教程 关于外接固态硬盘安装教
- java罗盘说明_综合罗盘各层应用说明
- 电信路由器用linux开发板,WRTnode: WRTnode是基于家用无线路由器芯片的开源Linux开发板,想法源于我之前的项目和产业经验...
- 基于 移远 BC26 移柯BL620的NB模块调试流程
- Spring 实战最新版中文版
- 安装Apache24服务时出现的AH00526错误解决办法
热门文章
- golang中使用GOPATH模式和GoModule(gomod)模式的区别
- C#API大全-C# WIN32 API大全
- android8.1 添加 doze白名单
- PAT(乙级)2022年夏季考试 C语言AC代码
- 使用pushd高效的切换目录
- 不值得定律 —— 如何在纠结的世界 活出不纠结的人生
- 黑马程序员——字符编码以及字符联通
- phpstorm 下载远程代码提示 No files or folders found to process
- python打印圆形_任意空实心圆形打印|Python练习系列[8]
- 微商怎么用快手引流?因为短视频的存在形式非常符合人们现在快节奏的生活