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

为什么JavaScript reduce方法当前索引参数从1开始?,javascript,Javascript,如果您要启动此snipet,请在控制台中启动它 [0,1,2,3].reduce((acc, val, index) => { console.log(index); return acc; }); 你会得到 1 2 3 所以问题是为什么索引从1开始 UPD:可能我遗漏了一些非常基本的东西,但是 [0,1,2,3].reduce((acc, val, index, initialValue) => { console.log(index); return acc;

如果您要启动此snipet,请在控制台中启动它

[0,1,2,3].reduce((acc, val, index) => {
  console.log(index);
  return acc;
});
你会得到

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

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

[0,1,2,3].reduce((acc, val, index, initialValue) => {
  console.log(index);
  return acc;
});
给我

1
2
3
0
UPD2:是的,是我遗漏了一些基本的东西

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

因为您没有提供
initialValue
参数。从文档中:

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

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

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


更多信息

这是显而易见的吗?或者downvote的原因是什么?上的文档中回答了这一问题:“要用作回调的第一个调用的第一个参数的值。如果未提供initialValue,则将使用并跳过数组中的第一个元素。”@我要重申我反对的核心:我意识到这是理性的人可能会有不同意见的事情。我不同意你的观点,但我不认为这是错误的,值得在公共场合骂你。。。反对票(至少对我来说)不是针对个人的,比如说,点名是这样的。@Amy你可能不会相信我,但在问我之前,我在读那个医生。有时候,即使是很明显,也不是很明显。如果你对这句琐碎的话感到不安,那我很抱歉。虽然我仍然保留我最初的想法,但我并不是说故意攻击字符。我更新了我的问题,请您解释一下我在示例中如何使其从0开始的更多信息?
initialValue
reduce()
的第二个参数,而不是回调的第四个参数。如下:
.reduce((acc,currentValue,index)=>{…},initialValue)@VolodymyrI。通常的经验法则是,您几乎永远不想使用非种子reduce(我们有时都会这样做,尽管我们不应该这样做):它会抛出一个空数组,这会使代码难以理解,等等。