JavaScript生成器、函数*和数组方法forEach

JavaScript生成器、函数*和数组方法forEach,javascript,ecmascript-6,Javascript,Ecmascript 6,我想使用forEach数组方法作为生成器内部的循环,而不是for 因此: function* someFunction() { for (let i = 0; i < someArray.length; i++) yield someArray[i]; } 问题:在普通函数(如“forEach”)中不允许使用yield 所以,问题是:绕过这个问题的最佳和优雅的方式是什么 我想使用forEacharray方法作为生成器内部的循环,而不是for 不,你没有 你没有,因为你不能。这简直

我想使用forEach数组方法作为生成器内部的循环,而不是for

因此:

function* someFunction() {

  for (let i = 0; i < someArray.length; i++) yield someArray[i];

}
问题:在普通函数(如“forEach”)中不允许使用yield

所以,问题是:绕过这个问题的最佳和优雅的方式是什么

我想使用
forEach
array方法作为生成器内部的循环,而不是for

不,你没有

你没有,因为你不能。这简直是不可能的。不要尝试

您可能想做的是缩短
for
循环,使其更加简洁,尤其是当您已经有了数组或迭代器时

简单的解决方案是使用:

yield*
将迭代委托给您使用它的iterable,并且比尝试使用
.forEach
要简洁得多

我想使用
forEach
array方法作为生成器内部的循环,而不是for

不,你没有

你没有,因为你不能。这简直是不可能的。不要尝试

您可能想做的是缩短
for
循环,使其更加简洁,尤其是当您已经有了数组或迭代器时

简单的解决方案是使用:


yield*
将迭代委托给您使用它的iterable,并且比尝试使用
要简洁得多。forEach

是的,我这样做。这甚至是可能的

yield*某些数组不允许在回调函数中调用
yield

但可以这样做:

 yield someArray.map((a) => {
            return function* (a){yield a}(a);
    });

但这并不是我真正想要的(简化代码),所以可能不值得这么做。

是的,我需要。这甚至是可能的

yield*某些数组不允许在回调函数中调用
yield

但有可能这样做:

 yield someArray.map((a) => {
            return function* (a){yield a}(a);
    });

但这并不是我真正想要的(简化代码),所以可能不值得这么做。

为什么不使用
(让某个数组的一个)来产生一个
?(我假设您的真实案例比显示的更复杂,否则只需
yield*someArray
)它更复杂,但可以在其中使用
for
。这个想法只是为了简化代码。为什么不使用
for(让某个数组的一个)生成一个
?(我假设您的真实案例比显示的更复杂,否则只需
yield*someArray
)它更复杂,但可以在其中使用
for
。这个想法只是为了简化代码。
 yield someArray.map((a) => {
            return function* (a){yield a}(a);
    });