我正在尝试对一系列对象进行数学计算。使用该映射获取对象内部的值,然后减少以进行计算。由于某种原因,请减少不返回正确的值。
这是一个示例:
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/
上共享代码答案 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;