Javascript 中 reduce 回调中的第二个参数

2nd argument in reduce callback in Javascript

var reverse = function (list) {
  return list.reduce(function (reversedList, current) {
    return [ current ].concat(reversedList);
  }, []);
};

console.log(reverse([1,2,3,4]));

所以这是为了使用 reduce 反转 Javascript 中的数组。根据MDNs ref。如果没有提供 initialValue,则第二个参数(此处 current)是数组第一个元素之后的第二个元素。但在这种情况下,当前不是第二个元素而是数组的最后一个元素。为什么会这样?

您可以 运行 控制台上的此代码用于某个数组 [1,2,3,4] 并且 current 将返回 4。

你的代码正在做的是在你这样做时创建一个包含当前项目的新数组:[current] 然后在它之后连接 "reversedList" 数组。

var reverse = function (list) {
  return list.reduce(function (reversedList, current) {
    //this creates a new array with just the "current" item in it
    //and then concatenates the "reversedList" array with it.

    console.log("concatenating ", current, "with", reversedList); 
    return [ current ].concat(reversedList);

  }, []);
};

console.log(reverse([1,2,3,4]));

这样做有点奇怪,但我认为这只是出于教育目的。您可以只将每个项目添加到数组的开头而不是串联。

 var reverse = function (list) {
  return list.reduce(function (reversedList, current) {
    reversedList.unshift(current);
    return reversedList;
  }, []);
};

console.log(reverse([1,2,3,4]));

也就是说,如果您只是想反转数组,您可以使用 reverse() 方法:

console.log([1,2,3,4].reverse());