2017-04-11 34 views
0

我想使用for eachach作爲循環內部發生器的數組方法,而不是JavaScript生成器,函數*和陣列方法forEach

所以不是:

function* someFunction() { 

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

} 

我想是這樣的:

function* someFunction() { 

    someArray.forEach((a) => {yield a}); 

} 

問題:產量是不是不允許普通的功能,如 「的forEach」

所以裏面的問題:繞過這個問題的最好和最優雅的方法是什麼?

+0

你爲什麼不使用'的(讓中的someArray)產生了'? (我假設你的真實情況比顯示較爲複雜,否則只是'產量* someArray') – nnnnnn

+0

更復雜,但有可能在其使用'for'。想法只是爲了簡化代碼。 –

回答

2

我想使用forEach數組方法作爲循環內部發生器而不是for。

不,你不知道。

你不要因爲你不能。這實際上是不可能的。不要嘗試。

可能是想要做的縮短for循環更加簡潔,特別是當你已經有一個數組或迭代器的時候。

簡單的解決方案是使用yield*

function* someFunction() { 
    yield* someArray 
} 

yield*將委託迭代你使用它的迭代,比試圖使用.forEach簡潔得多。

0

是我做的。甚至有可能。

yield* some Array沒有不允許你調用yield回調函數內。

但有可能做這樣的事情:

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

不過這不是我真正想要的(簡化代碼),所以也許它不值得做。