如何解决在ES6中,如何将一个生成器函数的可迭代结果作为参数传递给另一个生成器函数?
- 创建第一个生成器函数,该函数生成不超过该值的斐波那契数列。
- 创建第二个生成器函数,该函数将使用第一个生成器函数,该函数将返回Fibonacci系列元素,将它们存储在数组中,并将该数组传递给第三个生成器函数。
- 创建第三个生成器函数以过滤Fibonacci系列的偶数元素,即用'0'替换Fibonacci系列中的偶数元素。此生成器将从第二个生成器函数中获取Fibonacci系列元素的数组。
简而言之,此函数将采用一个参数,该参数将是Fibonacci系列可以具有的最大值,然后它将替换该系列数组中的所有偶数元素,并在过滤后生成结果数组。 / strong>
function* fun1(num1) {
var current = a = b = 1;
yield 0;
yield 1;
var input = 3;
while (input <= num1) {
current = b;
yield current;
b = a + b;
a = current;
input++;
}
}
it = fun1(10);
for (let num of it) {
console.log(num);
}
function* fun2(num) {
let array = [];
array.push(num);
yield array;
}
function* filterFn(array) {
for (var i = 0; i < array.length; i++) {
if (array[i] % 2 !== 0) {
array[i] = 0;
}
yield array;
}
}
我想将num
传递给*fun2
作为参数。在fun2的代码num
中显示undefined
。我怎样才能做到这一点?另外,如何将数组*fun2
返回到*filteFn
?
我编辑了问题以获取更多权限。
解决方法
如果要传递数组,则没有理由使第二个函数成为生成器函数。另外,当前缺少的是第二个功能使用第一个功能。你会写
function fun2(num) {
const array = Array.from(fun1(num));
return fun3(array);
}
for (const val of fun2(10)) console.log(val);
但是,如果您要真正使用生成器函数,那么filterFn
不会采用数组,而是需要迭代。而且您根本不需要第二个功能。只需写
function* filterFn(it) {
for (const num of it)
if (num % 2 == 0)
yield num;
}
for (const val of filterFn(fun1(10))) console.log(val);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。