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

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

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

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

let exampleSet = new Set();

Set只有一项属性即size.

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

二、Set的内建操作方法

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

// insertion 
> sampleSet.add(17)
Set(1) { 17 }
> sampleSet.add(19)
Set(2) { 17, 19 }
> // delete
> sampleSet.add(101)
Set(3) { 17, 19, 101 }
> sampleSet.delete(101)
true
> sampleSet
Set(2) { 17, 19 }
> // contains
undefined
> sampleSet.has(19)
true
> sampleSet.has(101)
false

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

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

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

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

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

function unionSet(setA, setB) {
    let union = new Set(setA);
    for (let elem of setB) {
        union.add(elem);
    }
    return union;
}
let setA = new Set([17, 23, 39, 47]), 
setB = new Set([29, 38]),
setC = new Set([59]);
console.log(unionSet(setA,setB)); 
console.log(unionSet(setA,setC)); 

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

function differenceSet(setA, setB) {
    let difference = new Set(setA);
    for (let ele of setB) {
        difference.delete(ele);
    }
    return difference;
}
let setA = new Set([35, 98, 56, 47]),
    setB = new Set([25, 47]);
console.log(differenceSet(setA, setB));

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

function isSuperset(setA, subset) {
  for (let elem of subset) {
    if (!setA.has(elem)) {
      return false;
    }
  }
  return true;
}
let setA = new Set([23, 35, 47, 59]),
  setB = new Set([23, 35]),
  setC = new Set([67]);
console.log(isSuperset(setA, setB));
console.log(isSuperset(setA, setC)); 


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


四、具体应用之数列查重

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

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


五、总结

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

展开阅读全文

页面更新:2024-04-22

标签:逆运算   操作   数列   子集   构思   长度   属性   思路   元素   关键词   形式   概念   常用   结构   数学

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top