2

JavaScriptに相当する「python's Generator」はありますか?

PS: Python のジェネレーターは、大きな配列、ハッシュを1 回反復処理する 必要がある場合、非常にメモリ効率が高くなります...それらはオンザフライで値を生成します

(Python のジェネレーターは、このスレッドで説明されています: What does the "yield" keyword do in Python? )

4

4 に答える 4

2

あまり実用的ではありませんが、次のようにして同じ基本的な効果を得ることができます。

function make_generator(start, end) {
  var i=start;
  return function() {
    if (i<end) {
      output = i;
      i += 1;
      return output;
    }
    else {
      return null;
    }
  }
}
var out = document.getElementById('out');
var generator = make_generator(1,10);
var g = generator();
while (g) {
  if (out.innerHTML)
    out.innerHTML = out.innerHTML + '<br>' + g;
  else
    out.innerHTML = g;
  g = generator();
}
于 2012-06-23T03:56:20.583 に答える
2

標準的な方法ではありません。一部のブラウザーは既に Python スタイルのジェネレーターを実装していますが、明示的にアクティブ化する必要がある拡張機能が必要です。ジェネレーターを ECMAScript 仕様の次のバージョンに追加するという提案がありますが、それがすぐに使用可能になるとは思えません。

これまでのところ、古い学校の外部反復子パターンを使用するのが最善です。より複雑なケースで書くのは面倒ですが、それは同じくらい強力です。

于 2012-06-23T03:13:07.950 に答える
1

JavaScript 1.7 では:

function rangeGen(n) {
    for (let i = 0; i < n; i++)
        yield i;
}
于 2012-06-23T03:14:25.647 に答える