后端返回的数组内容求和

后端传的数组,传几条不固定,怎么求和?

data: [
{code: "320100", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320200", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320300", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320400", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320500", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320600", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320700", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320800", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "320900", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "321000", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "321100", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "321200", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
{code: "321300", cumulativeElectric: 0, cumulativeProportion: 0, electric: 0, monthElectric: 0,}
]

我现在的写法

 selectElectricUpgrade({
        area: this.areas,
        month: this.time.format("YYYY-MM"),
      }).then((res) => {
        if (res.code === "0") {
          const arr = {};
          for (let i = 0; i < res.data.length; i++) {
            arr.electric += res.data[i].electric;
            arr.monthElectric += res.data[i].monthElectric;
            arr.cumulativeElectric += res.data[i].cumulativeElectric;
          }
          const arr1 = Number(arr.cumulativeElectric) / Number(arr.monthElectric);
          if (isNaN(arr1)) {
            const arr1 = 0;
            arr.cumulativeProportion = arr1.toFixed(2);
          } else {
            const arr1 = Number(arr) * 100;
            arr.cumulativeProportion = arr1.toFixed(2);
            console.log("", arr, arr1);
          }
          console.log(arr);
        }

控制台打印的结果

img

arr.electric += res.data[i].electric-0;
arr.monthElectric += res.data[i].monthElectric-0;
arr.cumulativeElectric += res.data[i].cumulativeElectric-0;

field 值填字段名,填哪个就计算哪个

let field = 'cumulativeElectric'

let count = data.reduce((res, item) => { 
        res += item[field] || 0
        return res
}, 0)
console.log('总和', count)

合计行不也要一条对象,把每个单独计算,放到一个对象渲染出来就好了啊

其实没怎么看懂题目,你是想条记录的所有值合计,还是说所有记录的每个属性合计。我看你代码怎么后面又除又乘的

还有你else那里的Number(arr)肯定有问题。。

res.data[i].electric;
res.data[i].monthElectric;
res.data[i].cumulativeElectric;
确保这三个不为空不为字符串类型
arr.monthElectric
确保这个不为空不为字符串类型不为0