返回 .forEach() 中的变量



如何访问foreach内部的范围以获取变量值?

var fruitCollection = ['Grape','Orange','Banana'];
// give me a .txt file with the recipe for each fruit
var fruitsNeeded = function(){
    fruitCollection.forEach(function(fruit) {
        var fruitRecipe  = fruit.toLowerCase() + '.txt';
        return fruitRecipe;
    });
}
fruitsNeeded(); // undefined

编辑 预期输出:

// grape.txt
// orange.txt
// banana.txt

不能从函数返回forEach

forEach() 为每个数组元素执行一次回调函数;与 map() 或 reduce() 不同,它总是返回未定义的值,并且不可链接。

您可以使用map函数

var fruitCollection = ['Grape','Orange','Banana'];
var fruitsNeeded = function(){
    return fruitCollection.map(function(fruit) {
         return fruit.toLowerCase() + '.txt';
    });
}

ES6 片段:

var fruitCollection = ['Grape','Orange','Banana'];
var fruitsNeeded = () => fruitCollection.map(f => f.toLowerCase() + '.txt');
document.write(JSON.stringify(fruitsNeeded()));

另一种选择是构建一个数组并返回整个数组:

var fruitCollection = ['Grape','Orange','Banana'];
// give me a .txt file with the recipe for each fruit
var fruitsNeeded = function(){
    var fruitRecipeList = [];
    fruitCollection.forEach(function(fruit) {
        var fruitRecipe  = fruit.toLowerCase() + '.txt';
        fruitRecipeList.push(fruitRecipe);
    });
    return fruitRecipeList;
}
fruitsNeeded();
forEach没有

返回值;它只是一种在数组上执行的方法。您可能想要map

var fruits = fruitCollection.map(function(fruit) {
  var fruitRecipe = fruit.toLowerCase() + '.txt';
  return fruitRecipe;
});
// fruits = ['grape.txt','orange.txt','banana.txt']
您可以

将它们添加到另一个全局范围变量中,而不是从 forEach 返回值。
喜欢这个:

var fruitCollection = ['Grape','Orange','Banana'];
var fruitFiles = [] ;
// give me a .txt file with the recipe for each fruit
var fruitsNeeded = function(){
    fruitCollection.forEach(function(fruit) {
        var fruitRecipe  = fruit.toLowerCase() + '.txt';
        fruitFiles.push(fruitRecipe) ;
    });
return fruitFiles ;
}
fruitsNeeded(); // ["grape.txt", "orange.txt", "banana.txt"]



我希望这有帮助,
雅各布

最新更新