JavaScriptはイテラブルであるプロトコルが存在する
反復処理プロトコル|MDN
JavaScriptのイテラブルなオブジェクトを作ってみた
- キー(Symbol.iterator)にnext関数をもつオブジェクトを登録しておく。
- 常にobjを参照するように
that = this
としておく。 - next関数を実行するたびに要素を1つずつ進める。
- 途中の要素の場合は
{ value: val, done: false }
を返す。 - 最後の要素が来たら
{ done: true}
を返す。
ご指摘お待ちしております。
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
}