首页 > 解决方案 > 如何使没有返回值的回调在高阶函数中工作

问题描述

我发布的代码有效,但它不遵循我的提示说明

“创建一个函数 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 循环。

标签: javascriptcallbackhigher-order-functions

解决方案


提示的语言在这里非常重要:

创建一个函数 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


推荐阅读