JS 數據結構-Set 集合 創建Set 常用Set方法


Set

  ES6 提供了新的數據結構 Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。

  很多時候我們把Set叫做 集合,但是,Set可以是集合,集合不一定是Set。

  特性:唯一性=>不重復=>能夠對數據進行去重操作。

注:集合去重,是全等匹配,===。

 

創建Set

  Set 本身是一個構造函數,調用構造函數用來生成 Set 數據結構。

    
    關鍵詞  標識符 = new Set();
  例    let    i   = new Set();
  
  Set 函數可以接受一個數組(或類似數組的對象)作為參數,用來進行數據初始化。

      let i = new Set([1, 2, 3, 4, 4]);  會得到  set{1, 2, 3, 4,}

注:如果初始化時給的值有重復的,會自動去除。

  集合並沒有字面量聲明方式。

 

Set的屬性

  常用的屬性就一個:size   返回 Set 實例的成員總數。

  let s = new Set([1, 2, 3]);

  console.log( s.size ); // 3

 

Set的方法

  Set 實例的方法分為兩大類:操作方法(用於數據操作)和遍歷方法(用於遍歷數據)。

  操作方法:

      add(value)    添加數據,並返回新的 Set 結構

      delete(value)   刪除數據,返回一個布爾值,表示是否刪除成功

      has(value)    查看是否存在某個數據,返回一個布爾值

      clear()      清除所有數據,沒有返回值

let set = new Set([1, 2, 3, 4, 4]);
// 添加數據 5
let addSet = set.add(5);
console.log(addSet); // Set(5) {1, 2, 3, 4, 5}
// 刪除數據 4s
let delSet = set.delete(4);
console.log(delSet); // true
// 查看是否存在數據 4
let hasSet = set.has(4);
console.log(hasSet); // false
// 清除所有數據
set.clear();
console.log(set); // Set(0) {}

  遍歷方法:

    Set 提供了三個遍歷器生成函數和一個遍歷方法。

      keys()     返回一個鍵名的遍歷器

      values()     返回一個鍵值的遍歷器

      entries()     返回一個鍵值對的遍歷器

      forEach()   使用回調函數遍歷每個成員

let color = new Set(["red", "green", "blue"]);
for(let item of color.keys()){
 console.log(item);
}
// red
// green
// blue
for(let item of color.values()){
 console.log(item);
}
// red
// green
// blue
for(let item of color.entries()){
 console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
color.forEach((item) => {
 console.log(item)
})
// red
// green
// blue

 

與數組相關操作

  Set 轉數組:

    由於擴展運算符...,內部的原理也是使用的 for-of 循環,所以也可以用於操作 Set 結構。

    例如將 Set 結構轉換為數組結構:

        

let color = new Set(["red", "green", "blue"]);
let colorArr = [...color];

 

  數組去重:

    擴展運算符和 Set 結構相結合,就可以去除數組的重復成員。

      

let arr = [1,2,2,2,2,"2",24,5,6];
//step1:數組轉集合
let set = new Set(arr);//已經去掉重復值,當前不是數組,而集合  Set { 1, 2, '2', 24, 5, 6 }
//step2:集合轉數組
arr = [...set];//[ 1, 2, '2', 24, 5, 6 ]

 

擴展

let num1 = new Set([1, 2, 3, 4]);
let num2 = new Set([3, 4, 5, 6]);

//並集
let union = new Set([...num1,...num2]);
console.log(union);//Set { 1, 2, 3, 4, 5, 6 }

//交集
let intersect = new Set(
    [...num1].filter(x=> num2.has(x))
)
console.log(intersect); //Set { 3, 4 }

//差集
let difference = new Set(
    [...num1].filter(x => !num2.has(x))
)
console.log(difference); //Set { 1, 2 }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM