从高阶函数返回数组

Returning an array from a higher order function

function map(arr, fn){
for(var i = 0; i <arr.length; i++){
    fn(arr[i]);
    //some code here
    }
}

map([1,2,3,4], function(val){
    return console.log(val * 2);
});

我在尝试将结果转换为数组形式时遇到问题。例如,[2,4,6,8]。我觉得我知道该怎么做,但我脑子一片空白。

您的回调需要return数组中每个项目的新值,您需要创建一个包含这些值的新数组

function map(arr, fn){
   return arr.map(fn);
}

var res = map([1,2,3,4], function(val){
    return val * 2;
});

console.log(res)

回调 (fn) 应该改变手头的数组值,map 应该 return 数组。请参阅片段。此外:只需使用我会说的原生 Array.map 方法(see mdn

function map(arr, fn){
  for(var i = 0; i <arr.length; i++){
    arr[i] = fn(arr[i]);
  }
  return arr;
}

console.log(
  map([1,2,3,4], function(val){  return val*2; })
);

// but hey, who needs it
console.log([1,2,3,4].map(v => v*2));