本文介绍了使用JavaScript在一个生成器上映射一个函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在JavaScript中有一个名为 generateNumbers
的生成器,另一个生成器 generateLargerNumbers
,它生成由 generateNumbers
并将函数 addOne
应用于它,如下所示:
返回值+ 1
}
函数* generateNumbers(){
yield 1
产生2
产出3
}
函数* generateLargerNumbers(){
for(常量number of generateNumbers()){
yield addOne(数字)
}
}
有没有更简单的方法可以做到这一点从生成的值中构建一个数组?我在想像这样:
pre $ function $ generateLargerNumbers() )//显然不起作用
解决方案
没有内置的方式来映射 Generator
对象,但您可以推出自己的函数:
const Generator = Object.getPrototypeOf(function *(){});
Generator.prototype.map = function *(mapper,thisArg){
for(const val of this){
yield mapper.call(thisArg,val);
}
};
现在你可以这样做:
function generateLargerNumbers(){
return generateNumbers()。map(addOne);
}
const Generator = Object.getPrototypeOf(function *(){}); Generator.prototype.map = function *(mapper,thisArg){for(const val this){yield mapper.call (thisArg,val); }}; function addOne(value){return value + 1} function * generateNumbers(){yield 1 yield 2 yield 3} function generateLargerNumbers(){return generateNumbers()。map(addOne)} console.log(... generateLargerNumbers ())
I have a generator called generateNumbers
in JavaScript and another generator generateLargerNumbers
which takes each value generated by generateNumbers
and applies a function addOne
to it, as such:
function addOne(value) {
return value + 1
}
function* generateNumbers() {
yield 1
yield 2
yield 3
}
function* generateLargerNumbers() {
for (const number of generateNumbers()) {
yield addOne(number)
}
}
Is there any terser way to do this without building an array out of the generated values? I'm thinking something like:
function* generateLargerNumbers() {
yield* generateNumbers().map(addOne) // obviously doesn't work
}
解决方案
There isn't a built-in way to map over Generator
objects, but you could roll your own function:
const Generator = Object.getPrototypeOf(function* () {});
Generator.prototype.map = function* (mapper, thisArg) {
for (const val of this) {
yield mapper.call(thisArg, val);
}
};
Now you can do:
function generateLargerNumbers() {
return generateNumbers().map(addOne);
}
const Generator = Object.getPrototypeOf(function* () {});
Generator.prototype.map = function* (mapper, thisArg) {
for (const val of this) {
yield mapper.call(thisArg, val);
}
};
function addOne(value) {
return value + 1
}
function* generateNumbers() {
yield 1
yield 2
yield 3
}
function generateLargerNumbers() {
return generateNumbers().map(addOne)
}
console.log(...generateLargerNumbers())
这篇关于使用JavaScript在一个生成器上映射一个函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!