集合简介
- 一种无序且唯一的数据结构。
- ES6 中有集合,名为Set
- 常用操作:去重、判断元素是否在集合中、求交集、求差集...
let arr = [1, 1, 2, 2, 33];
let brr = [...new Set(arr)];
console.log(brr);
const s = new Set(arr);
console.log(s.has(1));
let s1 = new Set([1, 2, 3, 4]);
let s2 = new Set([1, 2, 6, 7]);
console.log(new Set([...s1].filter((i) => s2.has(i))));
leetcode-cn.com 算法题实战
完整题目请打开 leetcode

解题思路
var intersection = function(nums1, nums2) {
return [...new Set(nums2)].filter(i => nums1?.includes(i));
};
ES6 Set的使用
使用Set
let mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add(5);
mySet.add("some text");
let o = {a: 1, b: 2};
mySet.add(o);
mySet.add({a: 1, b: 2});
mySet.has(1);
mySet.has(3);
mySet.has(5);
mySet.has(Math.sqrt(25));
mySet.has("Some Text".toLowerCase());
mySet.has(o);
mySet.size;
mySet.delete(5);
mySet.has(5);
mySet.size;
console.log(mySet);
迭代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);
var myArr = Array.from(mySet);
mySet.add(document.body);
mySet.has(document.querySelector("body"));
mySet2 = new Set([1, 2, 3, 4]);
mySet2.size;
[...mySet2];
let intersection = new Set([...set1].filter(x => set2.has(x)));
let difference = new Set([...set1].filter(x => !set2.has(x)));
mySet.forEach(function(value) {
console.log(value);
});
实现基本集合操作
function isSuperset(set, subset) {
for (let elem of subset) {
if (!set.has(elem)) {
return false;
}
}
return true;
}
function union(setA, setB) {
let _union = new Set(setA);
for (let elem of setB) {
_union.add(elem);
}
return _union;
}
function intersection(setA, setB) {
let _intersection = new Set();
for (let elem of setB) {
if (setA.has(elem)) {
_intersection.add(elem);
}
}
return _intersection;
}
function symmetricDifference(setA, setB) {
let _difference = new Set(setA);
for (let elem of setB) {
if (_difference.has(elem)) {
_difference.delete(elem);
} else {
_difference.add(elem);
}
}
return _difference;
}
function difference(setA, setB) {
let _difference = new Set(setA);
for (let elem of setB) {
_difference.delete(elem);
}
return _difference;
}
let setA = new Set([1, 2, 3, 4]),
setB = new Set([2, 3]),
setC = new Set([3, 4, 5, 6]);
isSuperset(setA, setB);
union(setA, setC);
intersection(setA, setC);
symmetricDifference(setA, setC);
difference(setA, setC);
Array 相关
let myArray = ["value1", "value2", "value3"];
// 用Set构造器将Array转换为Set
let mySet = new Set(myArray);
mySet.has("value1"); // returns true
// 用...(展开操作符)操作符将Set转换为Array
console.log([...mySet]); // 与myArray完全一致
数组去重
const numbers = [2,3,4,4,2,3,3,4,4,5,5,6,6,7,5,32,3,4,5]
console.log([...new Set(numbers)])
String 相关
let text = 'India';
let mySet = new Set(text); // Set {'I', 'n', 'd', 'i', 'a'}
mySet.size; // 5
// 大小写敏感 & duplicate ommision
new Set("Firefox") // Set(7) [ "F", "i", "r", "e", "f", "o", "x" ]
new Set("firefox") // Set(6) [ "f", "i", "r", "e", "o", "x" ]
下一站 字典