我想将 forEach 数组方法用作生成器内的循环,而不是用于。
所以相反:
function* someFunction() {
for (let i = 0; i < someArray.length; i++) yield someArray[i];
}
我想要这样的事情:
function* someFunction() {
someArray.forEach((a) => {yield a});
}
问题:普通函数中不允许屈服,例如&#34; forEach&#34;
所以问题:绕过这个问题的最佳和最优雅的方法是什么。
答案 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);
});
仍然不是我真正想要的(简化代码),所以可能不值得做。