如何访问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"]
我希望这有帮助,
雅各布