2017-09-05 79 views
0

我已经有了对象的数组的数组具有以下结构上订购的数组:Angularjs:如何基于对象的日期字段的子阵列

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

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

我试图做的是使用角度的排序依据过滤器订购从最旧到最新的日期,但我不确定如何做到这一点。

我已经试过排序依据过滤器设置为一个变量,像这样:

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

,但我敢肯定,我做错了什么。

编辑:

感谢一大堆马修对他所有的工作帮助我,而且由于他的帮助下,我意识到我需要做的。使用array.sort是我最终需要的数据结构。

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

尝试'排序依据:“date'' – Ronnie

+0

@AaronCase有没有在提交自己的答案,并标记为_the_的答案,如果你发现了一个更直接的方法没有坏处。干得好,其余的好运。 –

回答

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

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

+0

感谢马修的伟大榜样。我看到你的过滤器在做什么,并且我意识到我并没有正确地问我的问题。 –

+1

这里是我如何得到我需要的东西: $ scope.results.sort(功能(A,B){ \t回报[0] .date - B [0] .date; }); –