首页 > 解决方案 > 来自 JSON 数组的总和值

问题描述

很抱歉,如果这是重复的,但我正在尝试对 JSON 输出中的值求和,我可以对一个属性的值求和,但我需要对每个属性的月份匹配的值求和,任何帮助赞赏,

let json = 
{
   "months":[
      "Jun",
      "Jul",
      "Aug",
      "Sep",
      "Oct",
      "Nov"
   ],
   "data":{
      "label":[
         {
            "Electricity":[
               {
                  "total_bill":"84.54",
                  "due_date":"2020-06-30"
               },
               {
                  "total_bill":"62.38",
                  "due_date":"2020-07-30"
               }
            ]
         },
         {
            "Gas":[
               {
                  "total_bill":"133.26",
                  "due_date":"2020-06-29"
               },
               {
                  "total_bill":"120.25",
                  "due_date":"2020-07-30"
               }
            ]
         }
      ]
   }
}

比如我想加上6月份(2020-06)的电力和燃气的total_bill,并求和7月份(2020-07)的total_bill,请忽略months数组,它仅用于在图表中显示信息.

编辑:

到目前为止我尝试过的是:

let labels = [];

//Get labels name, eg. Electriciy, Gas, Water, etc
for(let i = 0; i < json.data.label.length; i++) {
    labels.push(Object.keys(json.data.label[i]).toString());    
  }

//Tried to sum them but only figure out how to sum for the same property
let temp = [];
for (let i = 0; i < json.data.label.length; i++) {
    let str = labels[i];    
    let values = json.data.label[i][str];

    let sum = 0;    
    for (let j = 0; j < values.length; j++) {
     sum = sum + Number(values[j].total_bill);      
    }
   temp.push(sum);
  }

//Desired output is:
//84.54 + 133.26 and 62.38+120.25
temp = [217.8,182.63];

非常感谢您对此进行调查并提供帮助

循环编辑:

好的,在玩完循环之后,我能够找到对值求和并返回所需输出的那个,谢谢

for (let i = 0; i < json.data.label.length; i++) {                
    let sum = 0;
    for (let j = 0; j < json.data.label.length; j++) {
      sum = sum + Number(json.data.label[j][labels[j]][i].total_bill);
    }        
    temp.push(sum);
  }

console.log(temp); // [217.8, 182.63]

标签: javascriptjsonloops

解决方案


 var sumgas = 0; 
 var sumelectric = 0;
 var date = '2020-06-20';
 json['data']['label'].forEach(function(row,idx){
   try{
       row['Gas'].forEach(function(row,idx){
           if(new Date(row['due_date']).getTime() > new Date(date).getTime()) 
           {
               sumgas += parseInt(row['total_bill'])
           }
       })
      row['SumGas'] = sumgas
   }
   catch(e){

   }
   try{
       row['Electricity'].forEach(function(row,idx){
           if(new Date(row['due_date']).getTime() > new Date(date).getTime()) 
           {
               sumelectric += parseInt(row['total_bill'])
           }
       })
     row['sumelectric'] = sumelectric
   }
   catch(e){

   }
});

console.log(sumgas)
console.log(sumelectric)

您可以使用此代码而无需任何更改


推荐阅读