计算动态json对象

时间:2015-10-27 10:02:39

标签: json angularjs

我有一个json对象,它将包含客户端的键值对,例如,客户端每天都会有所不同,具体取决于哪些客户在该月的某一天进行了某次交易。因此,我的数据仅包含客户进行的交易。以下是本月第一天的数据对象示例

$scope.dailybreakdown = [
      {'day': '1', 'client':'client1', 'received': '3', 'approved':'0'},
      {'day': '1', 'client':'client2', 'received': '8', 'approved':'1'},
      {'day': '1', 'client':'client3', 'received': '4', 'approved':'0'},
      {'day': '1', 'client':'client4', 'received': '4', 'approved':'0'},
      {'day': '2', 'client':'client1', 'received': '3', 'approved':'1'},
      {'day': '2', 'client':'client4', 'received': '12', 'approved':'5'},
      {'day': '3', 'client':'client1', 'received': '10', 'approved':'2'},
      {'day': '3', 'client':'client3', 'received': '5', 'approved':'1'},
      {'day': '3', 'client':'client8', 'received': '1', 'approved':'0'},
      {'day': '3', 'client':'client9', 'received': '2', 'approved':'2'},
]

第二天的数据可能包含更多或更少的客户端,它们可能不同,因为未进行任何交易的客户将不会出现在对象中。这个对象显然包含每个月的每一天的数据,而不仅仅是上面添加的样本中的前三天的数据。

我正在使用此数据以图形方式在表格和我的视图上的flot图表上显示它。这一切都很好,但我正在寻找一些帮助,如何对这些数据进行排序并计算它。

例如,我的表需要显示每天的交易总数。这意味着我需要计算所有Day 1 kay / value对并​​为每个字段创建总计。 (收到的总数,已批准的和重新计算的百分比)

由于这个json对象可能是巨大的,取决于每天处理的客户端的数量,我应该在我的控制器中创建一个新的json数组来保存这个每日数据,还是有一种方法可以过滤它并计算/根据需要每天重新计算一次?

我的表格行如下所示:(还需要更改以适应客户端总计在控制器中完成的数据过滤)

<tr ng-repeat="daily in dailystats" ng-click="setSelected($index);" ng-class="{'selected':$index == selectedRow}">
                  <td>{{daily.day}}</td>
                  <td>{{daily.received}}</td>
                  <td>{{daily.approved}}</td>
                  <td>{{daily.percentage}}</td>
                </tr>

任何帮助都会非常感激,因为我没有长时间使用json数据对象,而且我没有成功找到任何资源或示例来帮助我完成这项任务。 对于愿意提供帮助的人,请事先得到我的谢意。

1 个答案:

答案 0 :(得分:1)

下面是一种浏览json表中每一行的方法,并使用for循环查找等于1,2,3等的所有日期,然后找到&#34;收到&#34;总计并将它们全部加在一起并将该总数推送到一个新数组,然后使用ng-repeat在表格中显示该总数。我希望这能帮助你走上正轨...

的index.html

   <table>
      <thead>
        <th>Day</th>
        <th>Recieved</th>
        <th>Approved</th>
        <th>Percentage</th>
      </thead>
    <tbody>
      <tr ng-repeat="daily in dailybreakdown" ng-click="setSelected($index);" ng-class="{'selected':$index == selectedRow}">
                  <td>{{daily.day}}</td>
                  <td>{{daily.received}}</td>
                  <td>{{daily.approved}}</td>
                  <td>{{daily.percentage}}</td>
      </tr>
    </tbody>
    </table>

    <table>
      <thead>
        <th>Day</th>
        <th>Recieved</th>
      </thead>
    <tbody>
      <tr ng-repeat="day in days" ng-click="setSelected($index);" ng-class="{'selected':$index == selectedRow}">
                  <td>Day {{$index + 1}}</td>
                  <td>{{day}}</td>
      </tr>
    </tbody>
    </table>

app.js

  $scope.days = [];

  $scope.dailybreakdown = [
      {'day': '1', 'client':'client1', 'received': '3', 'approved':'0'},
      {'day': '1', 'client':'client2', 'received': '8', 'approved':'1'},
      {'day': '1', 'client':'client3', 'received': '4', 'approved':'0'},
      {'day': '1', 'client':'client4', 'received': '4', 'approved':'0'},
      {'day': '2', 'client':'client1', 'received': '3', 'approved':'1'},
      {'day': '2', 'client':'client4', 'received': '12', 'approved':'5'},
      {'day': '3', 'client':'client1', 'received': '10', 'approved':'2'},
      {'day': '3', 'client':'client3', 'received': '5', 'approved':'1'},
      {'day': '3', 'client':'client8', 'received': '1', 'approved':'0'},
      {'day': '3', 'client':'client9', 'received': '2', 'approved':'2'},
]


for(var x = 1; x <= 31; x++){
   var count = 0;
angular.forEach($scope.dailybreakdown, function(value, key) {

   if(value.day == x){
     count += parseInt(value.received,10);
   }
  });
    $scope.days.push(count);
  console.log($scope.days);
}

http://plnkr.co/edit/TK9QPwkcDWSJ1NjbH95a?p=preview