Angularjs:如何基于对象的Date字段

时间:2017-09-05 22:36:00

标签: javascript angularjs arrays sorting

我有一组具有以下结构的对象数组:

parentArr = [
[{id:1, date:1505020200000}, {id:4, date:1505020200000 }],
[{id:2, date:1504681500000}],
[{id:3, date:1504671000000}, {id:20, date:1504671000000}]
]

每个子数组只包含相同的日期。

我要做的是使用angular的orderBy过滤器来排序从最旧到最新的日期,但我不确定如何去做。

我已经尝试将orderby过滤器设置为如下变量:

$scope.dateFilter= arr[0][0].date 
<div ng-repeat="child in parentArr | orderBy: dateFilter">

但我确定我做错了什么。

编辑:

感谢Matthew帮助我的所有工作,并且由于他的帮助,我意识到我需要做什么。使用array.sort是我最终需要的数据结构。

$scope.results.sort(function (a, b) {
  return a[0].date - b[0].date;
});

2 个答案:

答案 0 :(得分:1)

创建自定义过滤器以展平数组:

(function(app){
    app.filter("flatten", function() {
        return function(input) {
            var output = [];
            input.forEach(function(innerArr) {
                output = output.concat(
                    innerArr.map(function(obj) { return obj; })
                );
                return output;
            });
            return output;
        };
    });
}(angular.module("yourModule")));

然后您的ng-repeat变为:

<div ng-repeat="child in parentArr | flatten | orderBy: 'date'">

<强> CodePen Demo

答案 1 :(得分:0)

添加一个getter函数来获取要排序的值。

$scope.myDateGetter = function(item) {
    return item[0].date;
}

然后将其作为表达式参数传递给orderBy过滤器。

<div ng-repeat="child in parentArr | orderBy: myDateGetter">

如此处所述:https://docs.angularjs.org/api/ng/filter/orderBy

相关问题