JavaScript之集合Set操作的3类10种方法

开发 前端
集合Set是数学上的概念用在编程上,主要特点是组内的所有元素均不重复。本篇就给大家介绍Set集合操作的所有方法。

[[402110]]

集合Set是数学上的概念用在编程上,主要特点是组内的所有元素均不重复。

一、Set 的创建及其唯一的属性

Set的创建与Array等相同,使用关键词new

  1. let exampleSet = new Set(); 

Set只有一项属性即size.

  1. > exampleSet = new Set([1, 5, 8]) 
  2. Set(3) { 1, 5, 8 } 
  3. > exampleSet.size 

 二、Set的内建操作方法

Set内建的操作方法包括:1)插入insertion 2) 删除 deletion 3) contain包含三项

  1. // insertion  
  2. > sampleSet.add(17) 
  3. Set(1) { 17 } 
  4. > sampleSet.add(19) 
  5. Set(2) { 17, 19 } 
  6. > // delete 
  7. > sampleSet.add(101) 
  8. Set(3) { 17, 19, 101 } 
  9. > sampleSet.delete(101) 
  10. true 
  11. > sampleSet 
  12. Set(2) { 17, 19 } 
  13. > // contains 
  14. undefined 
  15. > sampleSet.has(19) 
  16. true 
  17. > sampleSet.has(101) 
  18. false 

 三、Set其他非内建但常用的操作

SET除去add, delete, has等基础的内建操作之外,我们较为常用的是 intersection(交集A*B),isSuperSet超集,Union并集等。

首先,交集的思路就是将setA与setB中的元素,setA*setB 并用contains做出判断。

  1. function intersectSets(setA, setB) { 
  2.   let intersection = new Set(); 
  3.   for (let ele of setB) { 
  4.     if (setA.has(ele)) { 
  5.       intersection.add(ele); 
  6.     } 
  7.   } 
  8.   return intersection; 
  9. let setA = new Set([9, 12, 13, 24]); 
  10. let setB = new Set([2, 13, 17, 24]); 
  11. console.log(intersectSets(setA, setB)); /// Set {2, 3}/ 

 其次是并集setA + setB 只需要逐个添加进来即可。

  1. function unionSet(setA, setB) { 
  2.     let union = new Set(setA); 
  3.     for (let elem of setB) { 
  4.         union.add(elem); 
  5.     } 
  6.     return union
  7. let setA = new Set([17, 23, 39, 47]),  
  8. setB = new Set([29, 38]), 
  9. setC = new Set([59]); 
  10. console.log(unionSet(setA,setB));  
  11. console.log(unionSet(setA,setC));  

 接着是差集,setA-setB将setB中的元素全部都删除。

  1. function differenceSet(setA, setB) { 
  2.     let difference = new Set(setA); 
  3.     for (let ele of setB) { 
  4.         difference.delete(ele); 
  5.     } 
  6.     return difference; 
  7. let setA = new Set([35, 98, 56, 47]), 
  8.     setB = new Set([25, 47]); 
  9. console.log(differenceSet(setA, setB)); 

 最后是超集和子集,因为互为逆运算,只需要写一个函数即可,具体实现,我们构思其否定形式,只要setB中有一个元素而不在其内,则判定为非超集。

  1. function isSuperset(setA, subset) { 
  2.   for (let elem of subset) { 
  3.     if (!setA.has(elem)) { 
  4.       return false
  5.     } 
  6.   } 
  7.   return true
  8. let setA = new Set([23, 35, 47, 59]), 
  9.   setB = new Set([23, 35]), 
  10.   setC = new Set([67]); 
  11. console.log(isSuperset(setA, setB)); 
  12. console.log(isSuperset(setA, setC));  

 以上从Set内建操作 add, has, delete之外的 insection, union, difference, isSuperSet 四种操作。

四、具体应用之数列查重

数列查重往往需要先排序再逐个检查,但是用Set结构就简单多了,只需要比较其数据长度即可。

  1. function checkDuplicates(arr) { 
  2.     let mySet = new Set(arr); 
  3.     return mySet.size < arr.length; 
  4. checkDuplicates([11,27,38,49,52]); // false 
  5. checkDuplicates([11,11,28,38,49,56]); // true 

 五、总结

以上就是Set集合操作的所有方法。

 

责任编辑:姜华 来源: 今日头条
相关推荐

2018-12-19 19:30:46

JavaScript创建对象前端

2013-01-07 10:44:00

JavaScriptjQueryJS

2020-11-10 10:23:25

IT成本CIO高级分析师

2014-06-23 16:56:46

2020-06-04 08:17:44

JavaScript延展操作运算符开发

2022-09-02 14:29:01

JavaScrip数组属性

2010-12-02 08:12:16

2013-07-23 10:50:24

C程序

2010-05-27 18:18:14

MySQL修改root

2019-02-16 05:00:49

物联网IOT工业物联网

2020-05-15 08:28:18

二进制文件binLinux

2016-03-31 14:16:56

2017-06-09 13:51:42

Linux命令删除文件

2020-10-09 09:07:21

Python模块重载开发

2019-04-02 09:53:22

2011-04-08 09:16:12

JavaScript

2020-08-01 16:19:13

JavaScript字符串开发

2019-10-24 08:52:23

Linux压缩文件归档

2021-12-28 00:21:29

Windows 10Windows微软

2020-07-29 10:11:17

网络钓鱼电子邮件邮件安全
点赞
收藏

51CTO技术栈公众号