如果您了解如何使用集合,它们可能会非常强大。 集合的一些应用包括解决计数问题,您可能希望找到将元素分组在一起的方式数量。

另一个应用程序是需要您查找元素之间关系的问题。 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了解集合相关推荐

  1. JavaScript常见集合操作

    JavaScript常见集合操作 集合的遍历 FOR循环(效率最高) 优点:JavaScript最普遍的for循环,执行效率最高 缺点:无法遍历对象 for(let i=0;i<array.le ...

  2. JavaScript:集合与数组,重要但你不知道的ES6数据类型

    全文共3313字,预计学习时长10分钟 图源:Unsplash Set(集合)对象类型于2015年在ECMAScript*规范中提出,可以在 Node.js和大部分浏览器中使用. *ECMA是Euro ...

  3. JavaScript大集合笔记

    JavaScript 一.JavaScript简介 1. 什么是JavaScript? JavaScript简称JS,由网景分公司开发的客户端脚本语言,不需要编译,可以直接执行 补充: 机器语言(0, ...

  4. JavaScript 散集合(HashArray)

    散列表和散列映射是一样的,我们已经在本章中介绍了这种数据结构. 在一些编程语言中,还有一种叫作散列集合的实现.散列集合由一个集合构成,但是插入. 移除或获取元素时,使用的是散列函数.我们可以重用本章中 ...

  5. 高性能Javascript HTML集合访问的学习笔记

    HTML集合是包含了DOM节点引用的类数组对象. document.getElementsByTagName(); document.images   document.links document. ...

  6. JavaScript数据结构——集合(Set)

    概念和结构 集合里面的元素不能重复. 集合里面的元素只有值. 不包含任何元素的集合叫空集. 集合的操作 集合有九种常用操作,分别为 检查元素是否存在 has(element) 添加元素 add(ele ...

  7. javaScript技巧集合

    事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture();  event.srcE ...

  8. 推荐11个实用的JavaScript库

    作者 | Jonathan Saring 编辑 | 无明 JavaScript 仍然是 2018 年最受欢迎和使用最为广泛的编程语言,因此 JavaScript 生态系统也会继续发展壮大. 然而,Ja ...

  9. 如何在JavaScript中使用when()有条件地更改值

    30 Seconds of Code is a brilliant collection of JavaScript snippets, digestible in ≤ 30 seconds. Any ...

最新文章

  1. php7安装执行configure报错error: off_t undefined; check your library configuration
  2. 【泛型】Generic 参数化类型 类型转换
  3. 《数据库SQL实战》从titles表获取按照title进行分组
  4. php获取随机图片,PHP 随机显示某张图片
  5. 代言男科、站台微商、变身神棍....这些科学家被捧了几十年,黑历史曝光后,让人三观尽毁......
  6. 前端学习(1997)vue之电商管理系统电商系统之渲染tab栏标签
  7. python dataframe删除重复行_详解pandas使用drop_duplicates去除DataFrame重复项参数
  8. Java虚拟机-第二篇-GC算法与内存分配策略
  9. OpenCV实战5: LBP级联分类器实现人脸检测
  10. HttpClient 使用证书访问https站点
  11. 翻译Java虚拟机的结构
  12. sublime运行python_sublime交互执行python文件方法
  13. 三角网导线平差实例_导线三角网平差计算中的Wd是什么意思啊?怎么的算出来的?...
  14. 小型产生式系统——昆虫识别
  15. 外接西数固态硬盘linux,外接固态硬盘安装教程 关于外接固态硬盘安装教
  16. java罗盘说明_综合罗盘各层应用说明
  17. 电信路由器用linux开发板,WRTnode: WRTnode是基于家用无线路由器芯片的开源Linux开发板,想法源于我之前的项目和产业经验...
  18. 基于 移远 BC26 移柯BL620的NB模块调试流程
  19. Spring 实战最新版中文版
  20. 安装Apache24服务时出现的AH00526错误解决办法

热门文章

  1. golang中使用GOPATH模式和GoModule(gomod)模式的区别
  2. C#API大全-C# WIN32 API大全
  3. android8.1 添加 doze白名单
  4. PAT(乙级)2022年夏季考试 C语言AC代码
  5. 使用pushd高效的切换目录
  6. 不值得定律 —— 如何在纠结的世界 活出不纠结的人生
  7. 黑马程序员——字符编码以及字符联通
  8. phpstorm 下载远程代码提示 No files or folders found to process
  9. python打印圆形_任意空实心圆形打印|Python练习系列[8]
  10. 微商怎么用快手引流?因为短视频的存在形式非常符合人们现在快节奏的生活