ES6-Set集合与算法练习

143 阅读1分钟

Set集合原理

  • 集合是一种无序且唯一的数据结构
  • 集合的常用操作:去重、判断某元素是否在集合中、求交集
//去重
const arr = [1,1,2,2];
const arr2 = [...new Set(arr)];

//判断元素是否在集合中
const set = new Set(arr);
const has = set.has(3);

//求交集
const set2 = new Set([2,3]);
const set3 = new Set([...set].filter(item => set2.has(item)));

Set操作

  • 使用Set对象:new ,add ,delete, has, size
  • 迭代Set: 多种迭代方法,Set与Array互转、求交集/差集
let mySet = new Set()
//增加
mySet.add(1);
mySet.add(5);
mySet.add(5); //注意,这里只会添加一个5
mySet.add('some text');
let o = {a:1,b:2};
mySet.add(o);
mySet.add({a:1,b:2}); //注意这里会有两个{a:1,b:2}都被添加进来,因为它们所在的地址不一样

//元素是否在集合里
const has = mySet.has(5);

//删除
mySet.delete(5);

//迭代set
for(let item of mySet){
    console.log(item)
}
for(let item of mySet.keys()){
    console.log(item)
}
for(let item of mySet.values()){
    console.log(item)
}
for(let [key,value] of mySet.entries()){
    console.log(key,value)//打印的key ,value一样
}

//Set与Array互转
const myArr = [...mySet];
const myArr2 = Array.from(mySet);
const mySet2 = new Set([1,2,3,4]);

//求交集
const intersection = new Set([...mySet].filter(x=>mySet2.has(x)));
//求差集  s2里面没有 s1里面有
const  difference = new Set([...mySet].filter(x=>!mySet2.has(x)));

相关算法题

image.png

解题步骤:

  • 用集合对nums1去重。
  • 遍历nums1,筛选出nums2也包含的值。

var intersection = function(nums1, nums2) {
    return [...new Set(nums1)].filter(n => nums2.includes(n)); 
};
var intersection = function(nums1, nums2) {//耗时最长
    return [...new Set(nums1)].filter(n => new Set(nums2).has(n));
};

var intersection = function(nums1, nums2) { //耗时最短
    const set = new Set(nums1);
    const set2 = [...new Set(nums2)];
    const arr = set2.filter(item => set.has(item));
    return arr;
};