ユーザ用ツール

サイト用ツール


ecmascript:iterator

Iterator

Iterator(イテレータ)はes6で導入された集合オブジェクトに対して反復処理を行うオブジェクト。

IterableとIterator

Array、NodeList、Set、Map等はIterableである。Iterableなオブジェクトはfor-of文で反復処理を行う事が出来る。

for (let i of ["a", "b", "c"]) {
  console.log(i);    // => "a", "b", "c"
}

iteratorメソッドを実装している集合オブジェクトがIterable。iteratorメソッドはiteratorオブジェクトを返す。

console.log([1,2,3].iterator);   // => function iterator() { }

nextメソッドを実装しているオブジェクトがIterator。nextメソッドは反復処理でIterableの次の要素を取り出す。

console.log([1,2,3].iterator().next);   // => function next() { }

独自のIteratorを実装

オブジェクトの値を繰り返し取得するイテレータを実装する

function values(obj) {
  var i = 0;
  var keys = Object.keys(obj);
  return {
    iterator: function() {
      return this;
    },
    next: function() {
      if (i < keys.length) {
        return { value: obj[keys[i++]] };
      } else {
        return { done: true };
      }
    }
  }
}
 
var obj = {a:1, b:2};
for (let i of values(obj)) {
  console.log(i);    // => 1, 2
}
ecmascript/iterator.txt · 最終更新: 2015/10/24 04:29 by nullpon