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

Sort a nested Array (2D Array) array from filter of angularjs

我如何根据 angularjs 的过滤器对嵌套数组(二维数组)数组进行排序。这对我来说非常复杂。任何人都可以提供帮助。为我感激。谢谢...

我有一个二维数组。现在我如何在 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

要回答有关如何使用 angularjs 过滤器对嵌套 Array 数组进行排序的问题,您实际上已经在这样做了。你的数据不清楚,所以我扩展了它以显示已经发生的事情:

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>

输出:

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

可以通过使用自定义过滤器将所有内部对象展平到同一级别来实现

标记

  <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