javascript - 如何使没有返回值的回调在高阶函数中工作
问题描述
我发布的代码有效,但它不遵循我的提示说明
“创建一个函数 forEach,它接受一个数组和一个回调,并对数组的每个元素运行回调。forEach 不返回任何内容。请不要使用本机 forEach 或 map 方法。”
-- 它说它不会在 forEach 中返回任何内容。我只能让它与返回一起工作。有人可以帮助我了解如何在保持功能的同时不使用 forEach 函数的 return 吗?
// 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));
这是第三个挑战提示
现在让我们将挑战 1 中的地图重建为 mapWith。这一次,您将使用在挑战 2 中创建的 forEach 函数,而不是使用 for 循环。
解决方案
提示的语言在这里非常重要:
创建一个函数 forEach,它接受一个数组和一个回调,并在数组的每个元素上运行回调。forEach 不返回任何内容。
它要求您在数组的每个元素上调用一个函数,但并不要求您返回一个数组。与 不同的map
是,forEach
仅在每个项目上调用提供的回调,但它不返回数组。
来自 MDN:“forEach() 方法为每个数组元素执行一次提供的函数。” 例如,考虑使用本机 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
。
推荐阅读
- android - 停止 Jetpack Compose 指针InteropFilter 使用输入事件
- python - Python Selenium:遍历每个菜单页面并转到页脚并使用 POM 遍历页脚链接
- c# - 用于可执行部分的 Roslyn CSharpSyntaxWalker(基于可达代码块行走)
- python - Lasso 回归的 Mse 值
- javascript - 如何在 JavaScript 中构造树模式匹配算法?
- instructions - ebpf:验证 LD_ABS 和 LD_IND 指令
- javascript - JQuery 图像宽度一半的时间返回 0
- javascript - 开玩笑的模拟调用对象可能是未定义的
- excel - 将数据复制到表但保持过滤器处于活动状态
- javascript - Javascript Promise 未按正确顺序执行