【问题标题】:Is there a way to make an array of months and their Income from JSON?有没有办法从 JSON 中制作一系列月份及其收入?
【发布时间】:2020-11-10 02:45:47
【问题描述】:

我正在开发一个会计系统。我正在尝试显示一个条形图,其中包含有关每个月的收入和费用的信息。我通过 AJAX 从数据库中获取这些信息,然后得到下一个 JSON:

{
   "results":{
      "historic":[
         {
            "fecha":"2020-07-15",
            "balance":"5433"
         },
         {
            "fecha":"2020-07-15",
            "balance":"6883.25"
         },
         {
            "fecha":"2020-07-15",
            "balance":"5383.15"
         },
         {
            "fecha":"2020-07-18",
            "balance":"12383.15"
         },
         {
            "fecha":"2020-08-20",
            "balance":"13385.35"
         }
      ],
      "monthly":{
         "income":[
            {
               "month":"July\n",
               "July\n":"5433"
            },
            {
               "month":"July\n",
               "July\n":"1450.25"
            },
            {
               "month":"July\n",
               "July\n":"0"
            },
            {
               "month":"July\n",
               "July\n":"7000.00"
            },
            {
               "month":"August\n",
               "August\n":"1002.20"
            }
         ],
         "expense":[
            {
               "month":"July\n",
               "July\n":"0"
            },
            {
               "month":"July\n",
               "July\n":"0"
            },
            {
               "month":"July\n",
               "July\n":"1500.10"
            },
            {
               "month":"July\n",
               "July\n":"0"
            },
            {
               "month":"August\n",
               "August\n":"0"
            }
         ]
      }
   }
}

Historic 下的部分用于另一个已经工作的图表,但 Monthly 下的部分包含我当前正在处理的图表所需的所有信息。

这是我需要做的:
我需要使用 Javascript 创建一个数组,该数组可以包含月份名称及其总收入或费用。问题是我在那个月的每笔交易中都有一个条目,我需要总结一下。有点难解释,我举个例子吧。

我明白了:

  • 7 月:1000 美元
  • 7 月:300 美元
  • 7 月:50 美元
  • 8 月:400 美元
  • 8 月:7000 美元

而且我需要将它转换为数组内部的类似内容:

  • 7 月:1350 美元
  • 8 月:7400 美元

这是我一直在做的,但我认为这不是要走的路:

//DRAW THE MONTHLY RESULTS GRAPHIC

      var logs = [];

            for(var i = 0; i < jsonObj['results']['historic'].length; i++) {
                var results = jsonObj['results']['monthly'];
                if(logs.some(logs => logs.month === results['income'][i].month)){
                     console.log("Object found inside the array.");
                     //Need a way to get the total of the month from the logs Array.
                     var newTotal = results['income'][i].month + oldTotal;
                     logs.month = newTotal;
                 } else{
                     console.log("Object not found.");
                     logs.push(results['income'][i]);
                 }
          

             
            }

            console.log(logs);

感谢大家。我对这个论坛的东西很陌生,我希望我能很好地解释它。

【问题讨论】:

    标签: javascript html arrays json javascript-objects


    【解决方案1】:

    您可以执行以下操作,总体思路是生成一个新对象来存储您的值。您循环 ["income", "expense"] 并在此循环内,然后循环所有事务。如果该月的交易尚未添加到您的 now 对象,我们将已添加的金额设置为 0,否则设置为实际值。然后我们可以将新金额添加到当前金额中。

    您自己已经有了一些想法,但是使用数组会使查找变得比必要的困难。

    function sum_up_data(raw_data) {
      monthly = {
        income: {},
        expense: {}
      };
    
      Object.keys(monthly).forEach(transaction_type => {
        raw_data.results.monthly[transaction_type].forEach(raw_transaction => {
          const month = raw_transaction.month;
          const amount_to_add = parseFloat(raw_transaction[month]);
          const current_amount = monthly[transaction_type][month] || 0;
          monthly[transaction_type][month] = current_amount + amount_to_add;
        });
      });
    
      return { results: { monthly } };
    }
    
    
    // Test that it works
    raw_data = {
      results: {
        historic: [], // Omitted 'historic' values for brevity
        monthly: {
          income: [
            {
              month: "July\n",
              "July\n": "1450.25",
            },
            {
              month: "July\n",
              "July\n": "0",
            },
            {
              month: "August\n",
              "August\n": "1002.20",
            },
          ],
          expense: [
            {
              month: "July\n",
              "July\n": "0",
            },
            {
              month: "July\n",
              "July\n": "1500.10",
            },
            {
              month: "August\n",
              "August\n": "0",
            },
          ],
        },
      },
    };
    
    console.log(raw_data);
    console.log(sum_up_data(raw_data).results.monthly);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-03-26
      • 2019-10-11
      • 2019-07-11
      • 2017-02-07
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多