ES6 - Set

ES6以前,數組是javaScript裏面的惟一一個集合對象。若是你接觸過其餘編程語言,可能會知道用來表示集合的數據結構每每還有兩種:Set和Map。
Set沒有重複的元素的列表。而Map的元素是一個個的鍵值對。這一篇咱們只說Set,Map會另起一篇文章。接下來咱們就來看看Set的相關知識:
一:建立Set
1: 經過new Set()建立一個空列表java

let set = new Set();

以上咱們就成功地建立好了一個Set列表,只是它暫時沒有任何元素。在後面的內容,咱們能夠看到怎樣爲它添加元素。編程

2: 以一個可迭代對象初始化列表數組

let array = [1, 2];
let map = new Map([['name', 'mike'],['age', 25]]);
let setOfArray = new Set(array);
let setOfMap = new Set(map);

setOfArray.forEach(function (value, key, set) {
    console.log(`${key}: ${value}`);
});

setOfMap.forEach(function (value, key, set) {
    console.log(`${key}: ${value}`);
});

以上例子裏面的setOfArray.forEach()咱們獲得的打印結果是:數據結構

1: 1
2: 2

從這個打印結果,咱們也能夠看得出來,Set元素的key和value是同一個值。編程語言

以上例子裏面的setOfMap.forEach()咱們獲得的打印結果是:code

name,mike: name,mike
age,25: age,25

雖然咱們能夠用Map初始化一個Set,可是顯然這麼作沒什麼意義。一般咱們仍是更多會使用Array。
二:Set的增
當咱們經過給new Set()不傳遞任何參數而建立一個空Set以後,通常還須要經過add()方法來添加元素:對象

let set = new Set();
set.add(1);
set.add('1');
console.log(set.size); // 2

在上面的例子裏,咱們分別添加了數字型的和字符串形的1,最終咱們獲得兩個元素。這是Set區別於普通對象的地方:通常的對象,數值型的屬性名會被強制轉換爲字符串型;可是Set不會。ip

三:Set的刪
想要刪除Set裏面的全部元素,只須要調用clear()方法:字符串

let set = new Set([1, 2, 3]);
set.clear();
console.log(set.size); // 0

四:Set的查
咱們能夠經過has()方法來查詢某個元素是否在Set集合裏面:io

let set = new Set([1, 2, 3]);
console.log(set.has(1)); //true
console.log(set.has('1'));//false

五:Set的減
delete()方法可用於從Set集合裏面除去某個元素:

let set = new Set([1, 2, 3]);
set.delete(1);
console.log(set.has(1)); //fasle
console.log(set.size); // 2

七:Set的使用場景
從前面的文章中咱們陸陸續續瞭解到了Set集合的一些重要特性,好比:

1: Set沒有重複元素
2: Set元素的key和value爲同一值
3: 咱們可使用可迭代對象初始化Set

根據這些特性,咱們能夠實現Array的去重。基本的思路就是:

1: 要處理的Array集合做爲參數來初始化Set集合,這時咱們獲得一個沒有重複元素的Set
2: 經過展開運算符(...), 把第一步獲得的Set集合轉換爲一個數組

代碼示例:

let originalArray = [1, 1, 2, 2, 3, 4];
let set = new Set(originalArray);
let newArray = [...set];
console.log(newArray); // [1, 2, 3, 4]

以上,就是Set的一些基本特性,語法和使用場景。

相關文章
相關標籤/搜索