了解 reduce() 函数的工作原理

Understanding how the reduce() function works

我只是确保我知道这个功能是如何工作的。我昨晚阅读了 material 并观看了关于 reduce 函数的视频大约 3 个小时,我没有明白。我离开电脑,做了些食物,看了个电视节目,然后又看了看电脑,砰!我知道了。我现在知道 reduce 函数是如何工作的了。

我只是不知道为什么下面的第一个示例有效而第二个示例无效。

来源:Eloquent Javascript Ch. 5 §Flattening

这个有效:

var arrays = [[1, 2, 3], [4, 5], [6]];

var flattened = arrays.reduce(function(a, b) {
  return a.concat(b);
});

flattened; //=>[1, 2, 3, 4, 5, 6]

我尝试 fiddle 修改代码,将变量更改为函数。不知何故,我打破了它。下面是 returns undefined,我不知道为什么。

这不起作用:

var arrays = [[1, 2, 3], [4, 5], [6]];

function flattened(arr){
  arr.reduce(function(a, b) {
    return a.concat(b);
  });
}
flattened(arrays); //=> undefined

为什么第一个功能有效,而第二个功能无效?我确定这是我遗漏的小东西。

您需要 return 来自 flattened 函数。

function flattened(arr){
  return arr.reduce(function(a, b) {
    return a.concat(b);
  });
}

因为函数 flattened 没有 return 任何东西。

function flattened(arr){
  /* “return” needs to be here */ arr.reduce(function(a, b) { // No return from the outer wrapper function “flattened”
    return a.concat(b); // return from the inner function “reduce”
  });
}

其中的函数做了 return 某事,但包含函数没有。

flattened() 需要 return 这样的值:

var arrays = [[1, 2, 3], [4, 5], [6]];

function flattened(arr){
return arr.reduce(function(a, b) {
  return a.concat(b);
});
}
flattened(arrays);