我如何从angularjs的过滤器中对嵌套数组(2D数组)数组进行排序。这对我来说非常复杂。任何人都可以帮忙。感谢我。感谢...
我有一个2D数组。现在我如何在ng-repeat中对它进行排序。
模板文件......
<ul>
<span ng-repeat="list in lists">
<li ng-repeat="list_ in list.list1 | orderBy:'name'">{{list_.name}}</li>
</span>
</ul>
JS档案......
$scope.lists = [
{
no : 1,
list1 : [{
name : 'A'
},
{
name : 'M'
}]},
{
no : 2,
list1 : [{
name : 'B'
}]},
{
no : 5,
list1 : [{
name : 'Z'
}]},
{
no : 3,
list1 : [{
name : 'X'
},
{
name : 'T'
}]}
]
答案 0 :(得分:5)
通过使用自定义过滤器
将所有内部对象压平在同一级别,可以实现这一点<强>标记强>
<body ng-app="myApp" ng-controller="myCon">
<ul>
<span ng-repeat="list in lists | flatten | orderBy:'+name'">
<li>{{list.name}}</li>
</span>
</ul>
</body>
过滤强>
app.filter('flatten', function(){
return function(array){
var flattenArray = [];
angular.forEach(array, function(value, index){
angular.forEach(value.list1, function(val, index){
flattenArray.push(val);
})
})
return flattenArray;
}
})
答案 1 :(得分:1)
回答你如何使用angularjs过滤器对嵌套数组进行排序的问题,实际上你已经这样做了。您的数据并不清晰,因此我将其展开以使其显示已经发生的事情:
http://plnkr.co/edit/8SjuLc?p=preview
JS
var app = angular.module("myApp", []);
app.controller("myCon", myConFun);
myConFun.$inject = ['$scope'];
function myConFun($scope) {
$scope.lists = [{
no: 1,
list1: [{
name: 'Z'
}, {
name: 'X'
}, {
name: 'Y'
}, {
name: 'A'
}, {
name: 'M'
}, {
name: 'C'
}, {
name: 'B'
}]
}, {
no: 2,
list1: [{
name: 'B'
}]
}, {
no: 5,
list1: [{
name: 'Z'
}]
}, {
no: 3,
list1: [{
name: 'X'
}, {
name: 'T'
}]
}
]
}
HTML
<ul>
<span ng-repeat="list in lists">
<li ng-repeat="sublist in list.list1 | orderBy:'name'">
{{sublist.name}}
</li>
----------
</span>
</ul>
输出:
如果这不是您需要的行为,则可能需要进一步扩展您的问题