從ES2015開始,javascript默認提供了Set,Map,WeakSet,WeakMap
本文所有的例子都是在node.js 6.9.x下運行通過
在程序實現中,其實Set和Map操作非常多了,在C++的STL提供了基本于紅黑樹的Set和Map,在C++11版本增加了unorder_map和unorder_set,使用C++這方面操作非常方便,并且性能非常高.
通過http://node.green/這個網頁,可以看到node.js和各版本對ES2015,ES2016,ES2017的支持的情況.
可能看到Node 6.9.x對ES2015支持度達到99%
基中于Set,Map,WeakSet,WeakMap已經完全支持.這點讓我很開心.

那么我在node 6.9.x環境下,可以放心使用了
在這里,我記錄的是Set
基本例子:
創建Set對象
1.用new創建Set
let s = new Set();
或let s = new Set([1,2,3]);
2.用add命令增加元素
s.add(5);
也可以用.add連續加多個
s.add(100).add(200);
3.用size屬性獲取元素個數
console.log(s.size);
注意,不能用s.length,它沒有定義這個屬性
4.用has判斷元素是否存在
console.log(s.has(100)); //返回bool結果,true表示有,false表示無
5.用for of遍歷
for(let e of s) {
console.log(e);
}
也可用forEach
s.forEach(e=>console.log(e));
用ES5方法寫:
s.forEach(function (e) {console.log(e);});
用es2015的箭頭函數,簡潔好多啊
6.用delete刪除元素
s.delete(100); //返回bool結果,true表示刪除成功,false表示刪除失敗
s.clear();//則是清除所有的元素
7.關于keys,values和entries
實際上Set和Map一樣,都是以KeyValue的方式存放的,只是Set的Key和Value是一樣的。
所以keys和values返回的都是Key集合。如
let s = new Set([100,200,300]);
用s.keys()和s.values()返回的都是{ 100, 200, 300 }
而用s.entries()返回的則是{ [ 100, 100 ], [ 200, 200 ], [ 300, 300 ] }
我想這幾個函數是為了和Map定義為相同的行為吧。
8.注意:不能用add增加多個元素
如:s.add(100,200,300); 實際上,只增加了一個100
用s.add([100,200,300]);則是把[100,200,300]做為一個元素加到數組了
let s = new Set();
s.add([100,200,300]);
則得到的s為 { [ 100, 200, 300 ] }
如果用add加兩個{},則集合中,會有兩個{}
Let s= new Set();
s.add({}).add({});
則會得到{{},{}};
經過了解,原來集合中,是用===判斷兩個元素是相等
{}是不同的對象,所以就會出現上面的情況。