ES6中集合的操作

366 阅读2分钟

什么是集合?

  • 是一种无序且唯一的数据结构
  • ES6种有集合Set
  • 集合常用操作:去重、判断某元素是否在集合中、求交集、并集

集合常用操作

去重

const arr = [1,1,2,3,3];
const arr2 = new Set(arr);
console.log(arr2); //  Set(3) {1, 2, 3}
console.log([...new Set(arr)]);  // [1, 2, 3]

判断元素是否在集合中

// set函数中的 has() 方法来判断某个元素是否在集合中
const arr = [1,1,2,3,3];
const set = new Set(arr);
console.log(set.has(1));  // true

求交集

const set = new Set([1,1,2,3,3]);
const set2 = new Set([2,3]);
const set3 = new Set([...set].filter(item => set2.has(item)));  
console.log(set3)   // 2,3

并集

并集 即合并两个集合

const set1 = new Set([1,2,3,5]);
const set2 = new Set([2,4,7,8]);

// 方法1
console.log([...set1, ...set2]) // [1,2,3,5,2,4,7,8]

// 方法2
function union (setA, setB) {
    const set = new Set();
    setA.forEach(value => set.add(value));
    setB.forEach(value => set.add(value));
    return [...set]
}
console.log(union(set1, set2)) // [1, 2, 3, 5, 4, 7, 8]

Set()对象

使用Set() 可进行 添加,删除,查询,迭代

let mySet = new Set();

// 添加add
mySet.add(1);  
mySet.add(3);
mySet.add(3); // 添加相同的时mySet上面只有一个

let o = {a:1, b:3};
mySet.add(o);
mySet.add({a:1, b:3}); // 添加{a:1, b:3},会有两个。

// 查询
mySet.has(o); // true

// 删除delete
mySet.delete(5)

// 迭代Set
for(let i of mySet){} //方法1
for(let i of mySet.keys()){} //方法2
for(let i of mySet.values()){} //方法3
for(let [key, value] of mySet.entries){} //方法4

array与Set互转

let mySet = new Set();

// Set 转 array
const arr = [...mySet]; // []
const arr2 = Array.form(mySet); // []

// array 转 Set
const set = new Set([1,3,4])

交集和差集

差集解释为创建集合 set1 有,而集合 set2 没有的元素,即set1 减去和 set2 相交的部分,剩余的部分即是差集的部分

const set1 = new Set([1,3,4,6,7]);
const set2 = new Set([2,3,4,5]);

// 交集
const intersection = new Set([... set1].filter(item => set2.has(item)));
console.log([...intersection]);   // [3,4]

// 差集
/** differenceForSet1 的差集是相对于数组 set1 而言 **/

const differenceForSet1 = new Set([... set1].filter(item => !set2.has(item)))

console.log([... differenceForSet1])   // [1,6,7]



/** differenceForSet2 的差集是相对于数组 set2 而言 **/

const differenceForSet2 = new Set([... set2].filter(item => !set1.has(item)))

console.log([... differenceForSet2])   // [2,5]

力扣(leetcode)__349. 两个数组的交集

给定两个数组,编写一个函数来计算它们的交集。

  • 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
  • 输出:[9,4]
  • 解释:nums1 和 nums2 两个数组的相交部分为 [9, 4]

解题思路

  • 求 nums1 和 nums2 都有的值。
  • 对 nums1进行过滤 ,返回 nums2 里也有的值。
var intersection = function(nums1, nums2) {
    return [...new Set(nums1)].filter(item => new Set(nums2).has(item))
};