JavaScript版:数据结构之“集合”

490 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

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

leetcode-cn.com/problems/in…

image.png

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
  • 集合的常用操作: 去重、判断某元素是否在集合中、求交集 ...