为什么 JavaScript 的 reduce 方法当前索引参数从 1 开始?

Vol*_* I. 2 javascript

如果您将在控制台中启动此 snipet

[0,1,2,3].reduce((acc, val, index) => {
  console.log(index);
  return acc;
});
Run Code Online (Sandbox Code Playgroud)

你会得到

1
2
3
Run Code Online (Sandbox Code Playgroud)

所以问题是为什么索引从1开始?

UPD:可能我错过了一些非常基本的东西,但是

[0,1,2,3].reduce((acc, val, index, initialValue) => {
  console.log(index);
  return acc;
});
Run Code Online (Sandbox Code Playgroud)

给我

1
2
3
0
Run Code Online (Sandbox Code Playgroud)

UPD2:所以是的,我错过了一些基本的东西。

[0,1,2,3].reduce((acc, val, index) => {
  console.log(index);
  return acc;
}, 0);
Run Code Online (Sandbox Code Playgroud)

Seb*_*rek 7

因为你没有提供initialValue论据。从文档:

如果没有initialValue提供,将使用并跳过数组中的第一个元素

进一步阅读,你的问题有一个直接的答案:

注意:如果initialValue未提供,reduce()将从 index 开始执行回调函数1,跳过第一个索引。如果initialValue提供,它将从 index 开始0

更多信息在这里

  • `initialValue` 是 `reduce()` 的第二个参数,而不是回调的第四个参数。像这样: `.reduce((acc, currentValue, index) => {...}, initialValue);` (2认同)