1. 程式人生 > 實用技巧 >set和map的總結

set和map的總結

一、簡介

Set類似於陣列,但是它裡面每一項的值是唯一的,沒有重複的值,Set是一個建構函式,用來生成set的資料結構。

const arr = [1, 2, 3, 4, 5, 5, 4, 3, 2, 1];

const set = new Set();

arr.forEach(item => set.add(item));

console.log(set); // 1, 2, 3, 4, 5

console.log(typeof set) //object

// 陣列快速去重

console.log([...new Set(arr)]); //[1, 2, 3, 4, 5]

需要注意的是,set是一個物件,當使用...之後可以轉化為陣列

Map類似於JSON物件,也是鍵值對的集合,但是“鍵”的範圍不限制於字串,各種型別的值(包含物件)都可以當作鍵。Map 也可以接受一個數組作為引數,陣列的成員是一個個表示鍵值對的陣列。注意Map裡面也不可以放重複的項

var map = new Map();

var obj = { name: '小緣', age: 14 };

map.set(obj, '小緣喵');

console.log(map) //Map(1) {{{name:"小緣",age:14}} => "小緣喵"},也就是說鍵名可以是物件

map.get(obj); // 小緣喵

map.has(obj); // true

map.delete(obj) ;// true

map.has(obj); // false

二、操作

set的方法:通過add(key)方法可以新增元素到Set中,可以重複新增,但不會有效果

   通過delete(key)方法可以刪除元素

     has(value):判斷集合中是否存在 value

     clear():清空集合

map的方法:

var m = new Map(); // 空Map
m.set('Adam', 67); // 新增新的key-value
m.set('Bob', 59);
m.has('Adam'); // 是否存在key 'Adam': true
m.get('Adam'); // 67
m.delete('Adam'); // 刪除key 'Adam'
m.get('Adam'); // undefined
m.clear()將這個字典中的所有元素刪除

下面著重講一下set可以操作實現的一些例子

陣列的並集

let arr1 = [1,2,3];

let arr2 = [3,4,5];

let s1 = new Set([...arr1,...arr2]) //這樣就把重複的3去掉了

console.log([...s1]);//這就是並集的結果了

陣列的交集

let arr1 = [1,2,3,1];

let arr2 = [3,4,5,4];

let s1 = new Set(arr1);//先去除arr1陣列自身的重複項

let s2 = new Set(arr2);//去除arr2陣列自身的重複項

//先簡單介結一個數組的filter方法,它是es5的方法,它的引數是一個函式,如果這個函式返回的是true,

//表示把陣列的這一項留下,如果是false的話,會把陣列的這一項刪除掉

let arr = [...s1].filter((item)=>{

  return s2.has(item) //has方法看s2裡有沒有item這一項

})

console.log(arr)//[3]

陣列的差集

//將上述的程式碼修改一下就好

let arr = [...s1].filter((item)=>{

  return !s2.has(item) //重點在這裡,就是把咱們的交集取個反就ok了

})

三、區別

  • Set 和 Map 主要的應用場景在於 資料重組資料儲存
  • Set 是一種叫做集合的資料結構,Map 是一種叫做字典的資料結構

集合 與 字典 的區別:

    • 共同點:集合、字典 可以儲存不重複的值
    • 不同點:集合 是以 [value, value]的形式儲存元素,字典 是以 [key, value] 的形式儲存