小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
1. 集合简介
1. 集合是什么?
- 一种
无序且唯一
的数据结构 - ES6 中有集合,名为
Set
- 集合的常用操作: 去重、判断某元素是否在集合中、求交集 ...
# 2. 去重、判断元素是否在集合中、求交集
// 去重
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)));
2. LeetCode: 349. 两个数组的交集
intersection-of-two-arrays
2.1 解题步骤
- 用集合对nums1 去重
- 遍历nums1, 筛选出nums 2 也包含的值
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
return [...new Set(nums1)].filter(item => nums2.includes(item))
};
时间复杂度:Om*n 空间复杂度:Om
3. 前端与集合: 使用ES6的Set
- 使用Set 对象,new、add、delete、has、size
- 迭代Set: 多种迭代方法、Set 与 Array 互转、求交集\差集
3.1 创建 new Set()
// 1. 创建
let mySet = new Set();
3.2 add():添加值,返回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);
// 和o是不同的两个对象,会有两个{ a: 1, b: 2 }
mySet.add({ a: 1, b: 2 });
3.3 has():判断该值是否存在,并返回一个Boolean
let mySet = new Set();
let o = { a: 1, b: 2 };
mySet.add(o);
const has = mySet.has(o);
3.4 delate():删除值,并返回一个boolean 表示是否删除成功
const mySet = new Set([5]);
mySet.delete(5);
3.5 迭代 keys()、values()、.entries()
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 });
for(let [key, value] of mySet.entries()) console.log(key, value);
3.6 Set Array 互转
const myArr = Array.from(mySet);
const mySet2 = new Set([1,2,3,4]);
3.7 求交集
const intersection = new Set([...mySet].filter(x => mySet2.has(x)));
3.8 求差集
const difference = new Set([...mySet].filter(x => !mySet2.has(x)));
3.9 clear():清除所有值。没有返回值
let set = new Set();
set.add(1).add(2);
set.clear();
console.log(set,[...set]); // Set(0){} []
4.总结
技术要点
- 集合是一种
无序且唯一
的数据结构 - ES6 中有集合,名为
Set
- 集合的常用操作: 去重、判断某元素是否在集合中、求交集 ...