Set 數據結構

ES6 提供了新的數據結構 Set。它相似於數組,可是成員的值都是惟一的,沒有重複的值。Set 不能提供的則是索引。javascript

let set = new Set();

set.add({});
set.size // 1

set.add({});
set.size // 2

  兩個空對象不相等,因此它們被視爲兩個值。java

 

Set支持下列操做:數組

一、new Set:建立一個新的、空的 Set。數據結構

二、new Set(iterable):從任何可遍歷數據中提取元素,構造出一個新的集合。spa

三、set.size:獲取集合的大小,即其中元素的個數。code

四、set.has(value):斷定集合中是否含有指定元素,返回一個布爾值。對象

五、set.add(value):添加元素。若是與已有重複,則不產生效果。blog

六、set.delete(value):刪除元素。若是並不存在,則不產生效果。.add()和.delete()都會返回集合自身,因此能夠用鏈式語法。索引

七、set[Symbol.iterator]():返回一個新的遍歷整個集合的迭代器。通常這個方法不會被直接調用,由於實際上就是它使集合可以被遍歷,也就是說,咱們能夠直接寫 for (v of set) {...}等等。token

八、set.forEach(f):直接用代碼來解釋好了,它就像是 for (let value of set)  { f(value, value, set); }的簡寫,相似於數組的.forEach()方法。

九、set.clear():清空集合。

十、set.keys()、 set.values()和 set.entries()返回各類迭代器。

 

Array.from方法能夠將 Set 結構轉爲數組,能夠用來數組去重。

function do(array) {
  return Array.from(new Set(array));
}

do([1, 1, 2, 3]) // [1, 2, 3]

 

擴展運算符(...)內部使用for...of循環,因此也能夠用於 Set 結構,也能夠用來數組去重。

let arr = [3, 5, 2, 2, 5, 5];
let unique = [...new Set(arr)];
// [3, 5, 2]

數組的mapfilter方法也能夠間接用於 Set 了。

let set = new Set([1, 2, 3]);
set = new Set([...set].map(x => x * 2));
// 返回Set結構:{2, 4, 6}

let set = new Set([1, 2, 3, 4, 5]);
set = new Set([...set].filter(x => (x % 2) == 0));
// 返回Set結構:{2, 4}

let a = new Set([1, 2, 3]); let b = new Set([4, 3, 2]);  // 並集 let union = new Set([...a, ...b]); // Set {1, 2, 3, 4}  // 交集 let intersect = new Set([...a].filter(x => b.has(x))); // set {2, 3}  // 差集 let difference = new Set([...a].filter(x => !b.has(x))); // Set {1}
相關文章
相關標籤/搜索