You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript reduce方法返回异常值的问题求助

问题原因及解决方法

异常原因分析

1. reduce未设置初始值导致类型错误

调用reduce()时如果不传入第二个参数(初始累加值),JavaScript会默认把数组的第一个元素作为累加器的初始值。你的数组第一个元素是一个对象{Id: "1", Medio: "Datafono", ...},所以第一次迭代时dif是这个对象而非数字0。

对象与数字相加会触发隐式类型转换:对象先被转为字符串"[object Object]",再和数字的字符串形式拼接,比如"[object Object]" + 6000.00会得到"[object Object]6000",后续继续拼接其他数字的字符串形式,就出现了你看到的[object Object]16500000这类结果。

2. 小数点消失的原因

当带有.00的数字(如6000.00、0.00)被转为字符串时,末尾的.00会被自动省略,直接变成"6000"、"0",因此拼接后看不到小数点。

解决方法

在reduce()的第二个参数位置传入初始值0,确保累加器从数字类型开始计算:

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
    }, 0) // 添加初始值0
    let difGr = data.Totales.reduce(function (dif, c) {
        return dif + c.diferenciaGr
    }, 0) // 添加初始值0

    console.log(difML); // 输出171000.00
    console.log(difGr); // 输出0.00

    return (balance);
},

内容的提问来源于stack exchange,提问作者Tincho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 08:32:10