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

上一篇 / 下一篇  2021-05-28 11:08:02

  集合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集合操作的所有方法。

TAG: 软件开发 Java

 

评分:0

我来说两句

Open Toolbar