集合简介
- 无序且唯一 的数据结构
- ES6 中有集合 ,名为Set
- 集合常用的操作:去重,求交集,判断元素是否位于集合中,集合转为数组
-
// 去重 const arr = [1 , 1 , 2 , 2 ]; // 变为集合 const arr2 = new Set(arr); // 变为数组 const arr3 = [ ...arr2]; // 判断元素是否在集合中 const has = arr2.has(2); // 求交集 const set2 = new Set([2 , 3]); const set3 = new Set([...arr2].filter(item => set2.has(item)));
集合刷题
349. 两个数组的交集 - 力扣(LeetCode) (leetcode-cn.com)
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var intersection = function(nums1, nums2) {
return[...new Set(nums1)].filter(item => nums2.includes(item))
};
- 时间复杂度:N
- 空间复杂度:N
- 去重 通常转化为数组进行 ==》 数组的方法比较多
Set 操作
1. 使用set对象
-
增 删 判断有无 大小
-
let set = new Set(); set.add(1); set.add([1,2,2]); set.add(1); let a = { a: 1 , b:0}; // 两者内存地址不一样 set.add(a); set.add({a:1 , b:0}) const has = set.has(2); set.delete(1)
-
-
set 迭代 (key value 一致)
-
// 迭代 // key value 一致 说明没有顺序 for(item of set.values())console.log(item); for(item of set.keys())console.log(item); for([key , value]of set.entries())console.log(key , value);
-
-
set 与 数组的转化
-
// set 转为数组 const myArr = [...set]; const myArr2 = Array.from(set) // 数组转化为set const mySet = new Set([1 , 2]);
-
-
set 求交集 差集
-
// 交集 const intersection = new Set([...mySet].filter(x => set.has(x))) // 差集 const difference = new Set([...mySet].filter(x => !set.has(x)))
-
总结
- 集合是一种无序且唯一的数据结构
- ES6 中有集合 名为set
- 集合的常用操作:集合数组的转化、去重、增加删除、求交集和差集、集合的迭代、判断元素是否在集合中
参考文献
- lewis 《JavaScript版数据结构与算法》 系列课程