更容易迭代生成器?

时间:2015-09-07 10:49:50

标签: javascript c# node.js generator ecmascript-6

是否有更简单的方法(比我使用的方式)迭代生成器?某种最佳实践模式或常见包装?

在C#中我通常会有一些简单的事情:

public class Program {
    private static IEnumerable<int> numbers(int max) {
        int n = 0;
        while (n < max) {
            yield return n++;
        }
    }

    public static void Main() {
        foreach (var n in numbers(10)) {
            Console.WriteLine(n);
        }
    }
}

在JavaScript中尝试相同,这是我能想到的最好的:

function* numbers(max) {
  var n = 0;
  while (n < max) {
    yield n++;
  }
}

var n;
var numbers = numbers(10);
while (!(n = numbers.next()).done) {
  console.log(n.value);
}

虽然我会期待一些简单的事情......

function* numbers(max) {
  let n = 0;
  while (counter < max) {
    yield n++;
  }
}

for (let n in numbers(10)) {
  console.log(n);
}

......更具可读性和简洁性,但显然它并不那么容易?我已尝试使用node 0.12.7标记--harmony以及node 4.0.0 rc1。{我是否还需要做其他事情来启用此功能(包括let在我使用时的使用情况),如果可以使用此功能呢?

1 个答案:

答案 0 :(得分:13)

您需要对生成器使用for..of语法。这为可迭代对象创建了一个循环。

function* numbers(max) {
  let n = 0;
  while (n < max) {
    yield n++;
  }
}

使用它:

for (let n of numbers(10)) {
  console.log(n); //0123456789
}

Documentation