2015年1月29日 星期四

io.js 的 ES6 Collection 支援 - Set

Standard
io.js 不做任何設定下,預設支援了一些 ECMAScript 6 的語法,其中包括一系列的 Collection 支援,這讓 JavaScript 在資料操作上多了一些方便之處。本文將討論到的 Set 物件,就是其中一個 Collection 類別。

簡單來說,Set 是一個類似 Array 的物件型態,可以用於處理有序的資料,而且內建迭代器(Iterator:在某些應用上同樣功能也會稱之游標 Cursor),讓開發者可以很容易對資料進行一筆筆的處理。

基本操作

基本的 Set 物件使用很簡單,如下所示:
// 建立一個新的 Set
var items = new Set();

// 依序加入資料
items.add('Fred');
items.add('Stacy');
items.add('Wesley');
items.add('Rance');
items.add('Kevin');
items.add('Alex');

// 依序印出 Set 物件內的所有資料
for (var item of items) {
    console.log(item);
}
比較特別的是,如果要依序印出 Set 物件內的所有資料,需要使用『of』這個關鍵字。原因是 Set 物件本身是一個 Generator 實作所致,如果我們想要一次把 Generator 內的工作跑完,需要運用 for-loop 加上 of 關鍵字來達成。

註:關於 Generator 與 of 關鍵字,日後有空再撰文說明其細節。總之,只要記得必須使用 of 關鍵字才能一一讀取 Set 物件內的資料,就像 Array 的 for-loop 加上 in 關鍵字。

刪除資料

刪除特定資料可以使用 remove() 方法來達成,如下所示:
items.remove('Wesley');
若是要清空資料,可以使用 clear() 方法:
items.clear();

檢查資料是否存在

我們可以直接利用 has() 方法檢查特定資料是否存在:
items.has('Rance');

迭代器(Iterator)的使用

Set 的迭代器是圍繞著 Generator 來實作,所以當我們想要利用 Set 的迭代器,可以使用 values() 方法來取得一個新的迭代器,然後開始對資料進行一筆筆的操作:
var iter = items.values();
// 印出 Fred
console.log(iter.next().value) ;
// 印出 Stacy
console.log(iter.next().value) ;