我有一个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数据对象,而且我没有成功找到任何资源或示例来帮助我完成这项任务。 对于愿意提供帮助的人,请事先得到我的谢意。
答案 0 :(得分:1)
下面是一种浏览json表中每一行的方法,并使用for循环查找等于1,2,3等的所有日期,然后找到&#34;收到&#34;总计并将它们全部加在一起并将该总数推送到一个新数组,然后使用ng-repeat在表格中显示该总数。我希望这能帮助你走上正轨...
<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>
$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);
}