【发布时间】:2017-04-05 13:25:25
【问题描述】:
作为我正在学习的 Javascript 课程的一部分,您应该创建自己的 forEach 函数,该函数接受两个参数,一个数组和一个回调。它应该将每个元素、它的索引和数组本身传递给回调。应该返回未定义。这是我的:
function myForEach (arr, cb) {
for(var i = 0; i < arr.length; i++) {
var elem = arr[i];
cb(elem, i, arr);
}
}
然后,您应该在另一个函数中引用它并使用它来执行一些示例函数。特别是,您应该编写一个接受数组和回调作为参数的函数,并且它应该将回调传递给每个元素、其对应的索引和数组本身。然后它应该返回一个新数组,其中新数组中的每个元素都是回调的返回值。这是有问题的功能:
function myMap(arr, cb) {
var mapped = [];
mapped.push(myForEach(arr, cb));
return mapped;
}
我不明白为什么(在这个例子中),当传递的回调应该返回一个值时,我的值是未定义的:
console.log(myMap([1, 2, 3], function(ele, i, arr){
return ele * i;
}));
// [0, 2, 6] expected return value
在平衡返回未定义与未定义的内容以及如何将回调中的值实际推送到我的空数组中时,这里通常有点困惑。
【问题讨论】:
-
你的 forEach 不返回任何东西,所以这和
return undefined一样 -
问题出在这行 mapped.push(myForEach(arr, cb)); myForEach 不会返回进入回调的每个项目(实际上它什么也不返回,这就是您未定义的原因)。以下是如何使其工作,手动调用 cb 然后将其推送到映射数组。像这样:jsfiddle.net/2htuer9m
-
"它应该将回调传递给每个元素" - 我不这么认为 :-)
-
@HattanShobokshi 啊,是的 - 我和一位同事讨论了这个问题,他还指出你必须运行一个函数作为 myForEach 的 cb ,它将值推送到你的空数组,以及你的值're push 只是传递给 myMap 的 cb 的值。
-
点赞
function myMap(arr, cb) { var mapped = []; myForEach(arr, function(ele, i, arr) { mapped.push(cb(ele, i, arr)); }); return mapped; }
标签: javascript arrays foreach