我有一个数组,其中的对象如下所示:
{
"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到目前为止我所到的地方。在示例中,我列出了每辆车的汽车代码、行程(数组中的每个对象都是一次行程)和路上时间(所有记录的总和。持续时间)。
现在它会进行计算并显示记录列表中所有对象的结果,但下一步是执行相同的操作,但按月自动列出。
最佳答案
对于每个记录列表,您需要创建一个年月字典(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);
});
关于javascript - 使用 AngularJS 和 MomentJS 按月进行 ng-repeat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26913816/