JavaScript 数据结构 集合

216 阅读1分钟

集合简介

  • 无序且唯一 的数据结构
  • 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)

image-20211018085542990

/**
 * @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版数据结构与算法》 系列课程