// 数组去重
const arr = [1, 2, 3, 3, 2, 1];
const set = [...new Set(arr)]
console.log(set); // [1,2,3]
// 判断集合中是否存在某个值
const set1 = new Set(arr);
// const has = set1.has(1); // true
const has = set1.has(5); // false
// 求集合交集
const set2 = new Set([2, 3]);
// filter 返回一个数组
const set3 = new Set([...set2].filter(item => set1.has(item)));
console.log(set3); // Set {2,3}
给定两个数组,编写一个函数来计算它们的交集。
示例
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
说明:
【解题思路】
【解题步骤】
【复杂度分析】
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
// 如果 nums2.includes(item) 为 true,那就将当前的 item 返回到一个数组中
return [...new Set(nums1.filter(item => nums2.includes(item)))]
};
filter()
方法 为数组中的每个元素调用一次 callback 函数,并利用所有使得" callback 返回 true 或 等价于 true 的值 的元素"创建一个新数组。
ES6 提供了新的数据结构集合--Set,它的值是无序且唯一的。
Set 本身是一个构造函数,用来生成 Set 数据结构。
const set = new Set();
Set 函数可以接受一个数组作为参数,用来初始化。
const set = new Set([1,2,3]); // Set(3) {1, 2, 3}
实例方法
const s = new Set();
s.add(1).add(2).add(3); // 向 set 结构中添加值, 返回 Set 本身
s.delete(2) // 删除 set 结构中的2值,删除成功返回 true
s.has(1) // 表示 set 结构中是否有1这个值 返回布尔值
s.clear() // 清除 set 结构中的所有值
//注意:删除的是元素的值,不是代表的索引
遍历
Set 结构的实例与数组是一样的,也拥有 forEach 方法,用于对每一个成员执行某种操作,没有返回值。
const set = new Set([1,2,3,4,5])
set.forEach(val => console.log(val)); // 1,2,3,4,5
for...of...
const set = new Set([1,2,3,4,5])
for (let item of set) {
console.log(item); // 1,2,3,4,5
}
for (let item of set.keys()) {
console.log(item); // 1,2,3,4,5
}
for (let item of set.values()) {
console.log(item); // 1,2,3,4,5
}
for (let (key, val) of set.entries) {
console.log(key, val); // 1,1; 2,2; 3,3; 4,4; 5,5
}
Set 数据结构的键和值是一样的
数组和Set相互转换
// 将数组转为Set
const set = new Set([1,2,3])
// 将 Set 转为数组
const arr = [...set]
const arr1 = Array.from(set)
求交集/差集
const set1 = new Set([1,2,3]);
const set2 = new Set([3]);
// 交集 === [...set1].filter(item => set2.has(item)) 返回交集组成的数组
const interSection = new Set([...set1].filter(item => set2.has(item)))
// 差集 === !set2.has(item) 表示 set2 没有这一项则返回
const difference = new Set([...set1].filter(item => !set2.has(item)))
原文:https://www.cnblogs.com/aurora-ql/p/13948855.html