从angularjs的过滤器中对嵌套数组(2D数组)数组进行排序

时间:2015-08-18 17:33:36

标签: javascript angularjs multidimensional-array angularjs-ng-repeat angularjs-filter

我如何从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'
}]}
]

plunker here

2 个答案:

答案 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;
  }
})

Plunkr Here

答案 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>

输出:

enter image description here

如果这不是您需要的行为,则可能需要进一步扩展您的问题