什么是集合?
- 是一种无序且唯一的数据结构
- 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))
};