javascript - 使用 AngularJS 和 MomentJS 按月进行 ng-repeat

标签 javascript angularjs momentjs

我有一个数组,其中的对象如下所示:

{
"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/

相关文章:

javascript - 多级 Accordion 菜单 : Its possible to open each level with an anchor?

javascript - 用元素自身的副本替换innerHTML元素会改变文档高度吗?

javascript - AngularJS 惰性模块定义

javascript - Moment.js 默认年份是 2001 年

javascript - 在午夜重置变量/计数器的循环函数(moment.js,node.js)

angular - 如何使用 Angular 和 Moment 获得下个月的第一天

javascript - require ('../..' ) 是什么意思?

javascript - Highcharts 深入分析多个图表

javascript - 使用 jQuery 日期选择器编辑单元格时 AngularJS ngGrid 问题

python - Django 休息框架 : XMLHttpRequest cannot load http://127. 0.0.1:8000/xyz/api/abc