我有一个包含如下对象的数组:
{
"date":"11/11/2014",
"time":"17.20.37",
"car":"396",
"driver":"Jenny",
"from":"Old Office",
"destination":"Log WH",
"pax":"3","comment":"",
"commenttime":"",
"arrival":"17.20.48",
"inserted":true,
"cancelled":"",
"duration":"00:00:11"
}
我想要完成的是按月自动列出项目,如下所示:
-November 2014
ng-repeat with records from 11-14
-October 2014
ng-repeat with records from 10-14
我知道这涉及通过数组并将所有具有共同属性(同月和年)的项目聚集在一起。
我已经使用汽车代码执行此操作,列出了不同的独特汽车代码,如下所示:
var carsDict = {};
angular.forEach($scope.recordlist, function(record) {
carsDict[record.car] = carsDict[record.car] || [];
carsDict[record.car].push(record);
});
$scope.carstats = carsDict;
这段代码为每个唯一的汽车代码(record.car
)创建一个对象数组。
我可以对record.date
属性(这是一个moment()对象)执行相同的操作,但它会将所有具有相同确切日期的对象组合在一起,而不是同一个月和年。
有关如何实现这一目标的任何想法吗?
修改
这是我到目前为止的JSFiddle。在示例中,我列出了每辆车的汽车代码,行程(阵列中的每个对象都是行程)和道路上的时间(所有记录的总和)。
现在它进行计算并显示recordlist
的所有对象的结果,但下一步是做同样的事情,但是按月自动列出。
答案 0 :(得分:2)
对于每个记录列表,您需要创建年月字典(2014-11):
var monthsDict = {};
angular.forEach(records, function(record) {
var month = moment(record.date).format('YYYY-MM');
monthsDict[month] = monthsDict[month] || [];
monthsDict[month].push(record);
});
如果您需要,可以对其进行排序:
var sortDates = function(a,b) { return moment(a.date) - moment(b.date); };
angular.forEach(monthsDict, function(month) {
month.sort(sortDates);
});