Javascript 如何使无返回值的回调在高阶函数中工作

Javascript 如何使无返回值的回调在高阶函数中工作,javascript,callback,higher-order-functions,Javascript,Callback,Higher Order Functions,我发布的代码很有效,但它不符合我的提示说明 创建一个函数forEach,该函数接受数组和回调,并对数组的每个元素运行回调。forEach不返回任何内容。请不要使用本机forEach或map方法 --它说它不会在forEach中返回任何内容。我只能让它在返回时工作。有人能帮我理解如何在维护功能的同时不使用forEach函数的return吗 // Challenge 1 function subtractTwo(num) { return num - 2; } function map

我发布的代码很有效,但它不符合我的提示说明

创建一个函数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
函数减法二(num){
返回num-2;
}
函数映射(数组、回调){
var newArray=[];
对于(var i=0;i
下面是第三个挑战提示

现在让我们将挑战1中的地图重建为mapWith。这次不使用for循环,而是使用在挑战2中创建的forEach函数


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

创建一个函数forEach,它接受一个数组和一个回调,对数组的每个元素运行回调。forEach不返回任何内容

它要求您对数组的每个元素调用一个函数,但不是要求您返回一个数组。与
map
不同,
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
您的实现已接近完成,但看起来您可能试图在
forEach
函数中包含
map
功能(返回新数组)。您需要对其进行修改,使其仅为每个项调用函数,而不创建或返回新数组


为了创建
mapWith
函数,您可能需要一个处理创建新数组的中间函数,但该函数将与
回调
forEach
分开提示的语言在这里非常重要:

创建一个函数forEach,它接受一个数组和一个回调,对数组的每个元素运行回调。forEach不返回任何内容

它要求您对数组的每个元素调用一个函数,但不是要求您返回一个数组。与
map
不同,
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
您的实现已接近完成,但看起来您可能试图在
forEach
函数中包含
map
功能(返回新数组)。您需要对其进行修改,使其仅为每个项调用函数,而不创建或返回新数组


为了创建
mapWith
函数,您可能需要一个处理创建新数组的中间函数,但这将与
回调
forEach
分开。根据该提示,您几乎完成了,但做得太多了。您只需要完全按照提示符所说的操作,为每个元素运行回调,而不需要其他操作。不要尝试使用回调的结果,也不要创建新数组

因此,第二个挑战实现可能如下所示:

// 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]);
  }
}

根据提示,你就快到了,但你做得太多了。您只需要完全按照提示符所说的操作,为每个元素运行回调,而不需要其他操作。不要尝试使用回调的结果,也不要创建新数组

因此,第二个挑战实现可能如下所示:

// 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]);
  }
}