具有数组可链接性的JavaScript上的数组减少返回错误值

时间:2018-07-17 00:40:26

标签: javascript arrays

我正在尝试对一系列对象进行数学计算。使用该映射获取对象内部的值,然后减少以进行计算。由于某种原因,请减少不返回正确的值。

这是一个示例:

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。

您有什么想法吗?我在jsfiddle https://jsfiddle.net/dleo7/ckgnrubh/10/

上共享代码

2 个答案:

答案 0 :(得分:1)

  

MDN中的文档

     

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

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

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

console.log(newe);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

您应该传递初始值以简化功能,

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;