我发布的代码有效,但它没有按照我的提示说明
“创建一个带有数组和回调的函数forEach,并对数组的每个元素运行回调.forEach不返回任何内容。请不要使用原生的forEach或map方法。”
- 它表示它不会在forEach中返回任何内容。我只能让它回来工作。有人可以帮我理解如何在保持功能的同时不使用forEach函数返回吗?
// Challenge 1
function subtractTwo(num) {
return num - 2;
}
function map(array, callback) {
var newArray = [];
for (var i = 0; i < array.length; i++) {
newArray.push(callback(array[i]));
}
return newArray;
}
console.log(map([3, 4, 5], subtractTwo));
// Challenge 2
function forEach(array, callback) {
var newArray = []
for (var i = 0; i < array.length; i++) {
newArray.push(callback(array[i]));
}
return newArray
}
// Challenge 3
function mapWith(array, callback) {
var newArray = [];
return forEach(array, callback);
}
console.log(mapWith([3, 4, 5], subtractTwo));
这是第三个挑战提示
现在让我们从challenge 1重建地图作为mapWith。这次不是使用for循环,而是使用在challenge 2中创建的forEach函数。
答案 0 :(得分:1)
提示语言非常重要:
创建一个带有数组和回调的函数forEach,在数组的每个元素上运行回调。 forEach不返回任何内容。
它要求你在数组的每个元素上调用一个函数,但它不是要求你返回一个数组。与map
不同,forEach
仅在每个项目上调用提供的回调,但它不会返回数组。
From MDN:“forEach()方法为每个数组元素执行一次提供的函数。”例如,请使用native forEach考虑此代码:
var foo = [1, 2, 3];
function logger(item) {
console.log(item);
}
foo.forEach(logger);
>1
>2
>3
此外,如果我们尝试记录从forEach
返回的内容,我们会得到以下内容:
console.log(foo.forEach(logger));
>1
>2
>3
>undefined // The returned value
您的实施已接近,但您可能已尝试在map
功能中添加forEach
功能(返回新阵列)。您需要修改它,以便它只调用每个项目的函数,但不创建或返回新数组。
为了创建mapWith
函数,您可能需要一个处理创建新数组的中间函数,但该函数将与callback
和forEach
分开。
答案 1 :(得分:1)
根据这个提示,你几乎就在那里,但是你做得太多了。你只需要按照提示说的那样做,为每个元素运行回调,而不是其他任何东西。不要尝试使用回调的结果,也不要创建新的数组。
所以第二个挑战实施可能如下:
-XX:HeapDumpPath=/dev/null
使用// Challenge 2
function forEach(array, callback) {
// Just run the callback for each element. Do not save the results
// anywhere, do not return anything.
for (var i = 0; i < array.length; i++) {
callback(array[i]);
}
}
,您必须稍微更改forEach
功能才能使用它。在mapWith
中,不是将回调直接传递给mapWith
,而是将其包装在另一个函数中,您可以从原始回调中捕获结果并将其推送到新数组中。
类似于:
forEach