javascript减少返回不同的值

问题描述 投票:0回答:1

我有一个 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]。 关于这种奇怪行为的任何线索吗?

感谢和问候 马罗

javascript
1个回答
0
投票

需要将每个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)作为初始值

© www.soinside.com 2019 - 2024. All rights reserved.