我有一个 JSON 数组,如下所示:
"Totales": [
{
"Id": "1",
"Medio": "Datafono",
"diferenciaGr": 0.00,
"diferenciaML": 6000.00
},
{
"Id": "2",
"Medio": "Efectivo",
"diferenciaGr": 0.00,
"diferenciaML": 165000.00
},
{
"Id": "3",
"Medio": "Credito",
"diferenciaGr": 0.00,
"diferenciaML": 0.00
},
{
"Id": "4",
"Medio": "Transferencias",
"diferenciaGr": 0.00,
"diferenciaML": 0.00
}
我需要对最后两个字段求和:diferencaML 和 differenciaGr。 为此,我使用了reduce()
determinarBalance: function (balance) {
var cobranzasModel = this.getView().getModel("CobranzasSet"),
data = this.getView().getModel("CobranzasSet").getData();
let difML = data.Totales.reduce(function (dif, c) {
return dif + c.diferenciaML
})
let difGr = data.Totales.reduce(function (dif, c) {
return dif + c.diferenciaGr
})
console.log(difML);
console.log(difGr);
return (balance);
},
但由于某种原因,两个归约函数都返回以下结果:
[对象对象]16500000 [对象对象]000
根据上面的数据,结果应该是 171000.00 和 0.00。 所以,reduce就是不讲究小数点,在开头加上[object Object]。 关于这种奇怪行为的任何线索吗?
感谢和问候 马罗
需要将每个reduce的初始值设置为0。
let difML = data.Totales.reduce(function (dif, c) {
return dif + c.diferenciaML
}, 0) // change is here
let difGr = data.Totales.reduce(function (dif, c) {
return dif + c.diferenciaGr
}, 0) // change is here
否则,它将使用第一个项目本身(不仅仅是 .diferenciaML/.diferenciaGr)作为初始值