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

时间:2017-04-11 03:13:11

标签: javascript ecmascript-6

我想将 forEach 数组方法用作生成器内的循环,而不是用于

所以相反:

function* someFunction() {

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

}

我想要这样的事情:

function* someFunction() {

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

}

问题:普通函数中不允许屈服,例如&#34; forEach&#34;

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

2 个答案:

答案 0 :(得分:3)

  

我想将flex数组方法用作生成器内部的循环,而不是for。

不,你不是。

你不是因为你无法。这根本不可能。不要试试。

你可能想要做的事情是将<script> function myFunction() { var input, filter, ul, li, a, i, allfound; input = document.getElementById("myInput"); filter = input.value.toUpperCase().trim().split(/,| /); ul = document.getElementById("myUL"); li = ul.getElementsByTagName("li"); for (i = 0; i < li.length; i++) { allfound = true; a = li[i].getElementsByTagName("a")[0].innerHTML.toUpperCase(); for (var w = 0; w < filter.length; w++) { if (a.indexOf(filter[w].trim()) == -1) { allfound = false; break; } } li[i].style.display = allfound?"":"none"; } } </script> 循环缩短为更简洁,特别是当你已经有一个数组或迭代器时。

简单的解决方案是使用yield*

forEach

for会将迭代委托给您使用它的迭代,并且比尝试使用function* someFunction () { yield* someArray } 更简洁。

答案 1 :(得分:-1)

是的我做到了。甚至可能。

yield* some Array不允许您在回调函数内调用yield

但是可以这样做:

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

仍然不是我真正想要的(简化代码),所以可能不值得做。