javascript上的Array reduce返回具有数组链接性的错误值

javascript上的Array reduce返回具有数组链接性的错误值,javascript,arrays,Javascript,Arrays,我在试着对一组对象进行数学运算。使用贴图获取对象内部的值,然后减少计算量。由于某些原因,reduce无法返回正确的值 这是一个例子: var test = [{ id: 1, value: 2 }]; var newe = test.map((x) => x.value).reduce(function(total, sum) { console.log([total, sum]); return total + (sum * 2); }); 它应该返回4,但是它返回2

我在试着对一组对象进行数学运算。使用贴图获取对象内部的值,然后减少计算量。由于某些原因,reduce无法返回正确的值

这是一个例子:

var test = [{
  id: 1,
  value: 2
}];
var newe = test.map((x) => x.value).reduce(function(total, sum) {
  console.log([total, sum]);
  return total + (sum * 2);
});
它应该返回4,但是它返回2


你知道怎么回事吗?我在JSFIDLE上共享代码

您应该传递初始值以减少函数

var test = [{
  id: 1,
  value: 2
}];
var newe = test.map((x) => x.value).reduce(function(total, sum) {
  console.log([total, sum]);
  return total + (sum * 2);
}, 0);

document.getElementById('output').innerHTML = newe;
医生

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

因此,基本上,您的方法跳过第一个索引0,第一个值返回2。要解决这个问题,需要传递initialValue,在本例中为0

var测试=[{ id:1, 价值:2 }]; var newe=test.mapx=>x.value.reducefunctiontotal,总和{ 返回总计+总和*2; }, 0; // ^ // | //+--初始值 console.lognewe;
.作为控制台包装{max height:100%!important;top:0;}您忘记为reduce提供初始值,因此它根本不会迭代,只解析为一个值的值。始终传递初始值以进行reduce。