LoginSignup
0
0

More than 5 years have passed since last update.

イテラブルなオブジェクトを作成してfor...of、for...inで動かす

Posted at

JavaScriptはイテラブルであるプロトコルが存在する
反復処理プロトコル|MDN

JavaScriptのイテラブルなオブジェクトを作ってみた

  • キー(Symbol.iterator)にnext関数をもつオブジェクトを登録しておく。
  • 常にobjを参照するようにthat = thisとしておく。
  • next関数を実行するたびに要素を1つずつ進める。
  • 途中の要素の場合は{ value: val, done: false }を返す。
  • 最後の要素が来たら { done: true} を返す。

ご指摘お待ちしております。:bow_tone1:


var iterator = function () {
  var current = 0
  var keys = Object.keys(this)
  var that = this // objectに登録するとthat
  var iterator = {
    next() {
      if (current < keys.length) {
        var result = { value: that[keys[current]], done: false }
        current++;
        return result
      } else {
        return { done: true }
      }
    }
  }
  return iterator
}

var obj = { a: 1, b: 2 }
obj[Symbol.iterator] = iterator;//iterableにする

for (let val of obj) {
  console.log(val)// 1, 2
}

for (let key in obj) {
  console.log(key)// a, b
}

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0