Set 結構數據

SetES6 中提供的新數據結構,它類似於數組,但是成員的值都是唯一的,沒有重複的值。Set本身是一個構造函數,用來生成 Set 數據結構。

const set = new Set();
set.add(1);
set.add(2);
set.add(2);
console.log(set.size); // 2
console.log([...set]); // [1, 2]

上面的代碼可以看到,因爲Set是沒有重複值的,所以當添加兩個2的時候只加進去一個2。這裏size是Set實例的一個屬性,返回Set實例的成員總數。

另外,Set還可以接受一個數組作爲參數,用來初始化。

const setAarrray = new Set([1, 2, 2, "2", 3, 3, 4, 5, NaN, NaN, {}, {}]);
console.log([...setAarrray]); //[1, 2, "2" 3, 4, 5, NaN, {}, {}];

這個時候2和"2"都加進去了,是因爲在Set內部判斷兩個值是否相等用的是全等"==="。有一點要注意的是,向 Set 加入值時認爲NaN等於自身,而精確相等運算符認爲NaN不等於自身。所以上面代碼中,添加兩個NaN時,加進去一個。上面添加兩個空對象時都加進去了,說明兩個空對象是不相等的。在Set內部認爲,兩個對象總是不等的。

Set實例有自己的方法,下面介紹一下它的方法:

  • Set.prototype.add(value):添加某個值,返回 Set 結構本身。
  • Set.prototype.delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。
  • Set.prototype.has(value):返回一個布爾值,表示該值是否爲Set的成員。
  • Set.prototype.clear():清除所有成員,沒有返回值。
 const set = new Set();
 set.add(1);
 set.add(2);
 console.log(set.size);  //2
 console.log(set.has(1)); //true
 console.log(set.has(2)); //true
 console.log(set.has('2')); //false
 set.delete(2);
 console.log(set.size); //1
 console.log(set.has(2)); //false

Set 結構的實例還有遍歷操作,可以用於遍歷成員。下面是遍歷的四種方法

  • Set.prototype.keys():返回鍵名的遍歷器
  • Set.prototype.values():返回鍵值的遍歷器
  • Set.prototype.entries():返回鍵值對的遍歷器
  • Set.prototype.forEach():使用回調函數遍歷每個成員

keys方法、values方法、entries方法返回的都是遍歷器對象。由於 Set 結構沒有鍵名,只有鍵值(或者說鍵名和鍵值是同一個值),所以keys方法和values方法的行爲完全一致。下面代碼中entries方法返回的遍歷器,同時包括鍵名和鍵值,所以每次輸出一個數組,它的兩個成員完全相等。

    const set = new Set(["a", "b", "c"]);
    for (let item of set.keys()) {
      console.log(item);
      // "a"
      // "b"
      // "c"
    }

    for (let item of set.values()) {
      console.log(item);
      // "a"
      // "b"
      // "c"
    }

    for (let item of set.entries()) {
      console.log(item);
      // ["a", "a"]
      // ["b", "b"]
      // ["c", "c"]
    }

還可以省略values方法,直接用for...of循環遍歷 Set。

const set = new Set(["a", "b", "c"]);
for (let item of set) {
     console.log(item);
      // "a"
      // "b"
      // "c"
 }

Set 結構的實例與數組一樣,也擁有forEach方法,用於對每個成員執行某種操作,沒有返回值。

const set = new Set(["a", "b", "c"]);
set.forEach((value, key) => {
      console.log(value + ":" + key);
      // a:a
      // b:b
      // c:c
});

Set可以進行數組和字符串的去重

  const array = [1, 2, 3, 4, 4, 3, 2, 3];
  const resultArray = [...new Set(array)];
  console.log(resultArray); // [1, 2, 3, 4]

  const str = 'abbbcc';
  const resultStr = [...new Set(str)].join('');
  console.log(resultStr); // "abc"

大概就是這些,如果想知道得更詳細可以去查看ES6。地址 http://es6.ruanyifeng.com/#docs/set-map

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章