我试图创建一个带有数组和函数的forEach()
函数,然后对数组的每个元素执行函数操作。但是,在尝试传递以下匿名函数时,我得到undefined
。我在阅读其他帖子之后尝试向return
函数添加forEach()
,但之后函数根本没有运行,只返回收到的第一个array[i]
而不修改它。
function forEach(array, action){
for(var i = 0; i < array.length; i++)
action(array[i]);
}
var myArray = [1, 2, 3];
var something = forEach(myArray, function(element){return element++;});
console.log(something)
//undefined
返回undefined
。
function forEach(array, action){
for(var i = 0; i < array.length; i++)
return action(array[i]);
}
var myArray = [1, 2, 3];
var something = forEach(myArray, function(element){return element++;});
console.log(something)
//undefined
返回1
。
我错过了什么?
(我知道.forEach()函数存在,我正在尝试将其作为学习练习)
答案 0 :(得分:3)
您的forEach
功能无法返回任何内容。看起来您正在尝试map
实施。如果是这样,您需要将结果添加到新数组并返回该数组。
function map(array, action) { // Renamed forEach to a more suitable name
var results = [];
for (var i = 0; i < array.length; i++) {
results.push(action(array[i]));
}
return results;
}
答案 1 :(得分:0)
您的foreach
实施是正确的 - 它不应该返回任何内容。如果您想要map
(即将参数转换为新数组),您可以先实现reduce
:
function reduce(array, action, result) {
forEach(array, function (elem) {
result = action(result, elem);
});
return result;
}
然后,通过map
定义reduce
:
function map(array, action) {
return reduce(array, function (result, elem) {
return result.concat(action(elem));
}, []);
}
全部放在一起:
function forEach(array, action) {
for (var i = 0; i < array.length; i++)
action(array[i]);
}
function reduce(array, action, result) {
forEach(array, function (elem) {
result = action(result, elem);
});
return result;
}
function map(array, action) {
return reduce(array, function (result, elem) {
return result.concat(action(elem));
}, []);
}
a = map([1, 2, 3, 4], function (x) {
return ++x
});
document.write('<pre>' + JSON.stringify(a, 0, 3));