【问题标题】:Sort based on array length within array of objects in Angular JS基于Angular JS中对象数组中的数组长度排序
【发布时间】:2017-08-04 13:47:03
【问题描述】:

考虑下面的例子,

var arrayOfObject = [
{name: 'ron', data: [1,3,5]},
{name: 'raj', data: [2,3]},
{name: 'roy', data: [1]}
]

在视图中,我需要根据每个对象中data数组的长度对对象进行升序排序。

在上面的例子中 roy, raj, ron.

我总是可以遍历数组,找到长度并对其进行排序,但想知道是否有办法使用 Angular 的 OrderBy 过滤器(视图或控制器)对其进行排序。

谢谢,

【问题讨论】:

    标签: javascript angularjs arrays sorting


    【解决方案1】:

    是的,您可以使用 Angular 的 OrderBy filter

    在视图中:

    <div ng-repeat="item in arrayOfObject | orderBy:'data.length'">
    

    或在控制器中:

    var ordered = $filter("orderBy")(arrayOfObject, "data.length");
    

    this jsfiddle

    【讨论】:

      【解决方案2】:

      试试这个

        <div ng-repeat="item in arrayOfObject | orderBy:'data.length'">
          {{item.name}}:{{item.data.length}}
        </div>
      

      var app = angular.module("app", []);
      app.controller("ctrl", function($scope) {
        $scope.arrayOfObject = [{
            name: 'ron',
            data: [1, 3, 5]
          },
          {
            name: 'raj',
            data: [2, 3]
          },
          {
            name: 'roy',
            data: [1]
          }
        ];
      });
      <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
      <div ng-app="app" ng-controller="ctrl">
      ASEC:
        <div ng-repeat="item in arrayOfObject | orderBy:'data.length'">
          {{item.name}}:{{item.data.length}}
        </div>
      <br/>
      DESC:
        <div ng-repeat="item in arrayOfObject | orderBy:-'data.length'">
          {{item.name}}:{{item.data.length}}
        </div>
      </div>

      【讨论】:

        【解决方案3】:

        尝试以下方法:

        var myApp = angular.module('myApp', []);
        myApp.controller('myController', ['$scope', '$filter', function($scope, $filter){
        
        var arrayOfObject = [
          {name: 'ron', data: [1,3,5]},
          {name: 'raj', data: [2,3]},
          {name: 'roy', data: [1]}
        ]
        $scope.arrayOfObject = $filter("orderBy")(arrayOfObject, 'data.length');
          console.log($scope.arrayOfObject);
        }]);
        <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
        <div ng-app='myApp' ng-controller='myController'>
        </div>

        【讨论】:

          【解决方案4】:
          <div ng-repeat="item in array| orderBy:'data.length'>
          

          这里orderBy 取得data 的财产

          【讨论】:

            【解决方案5】:

            我们可以使用orderby子句

            升序

            <div ng-repeat="item in arrayOfObject | orderBy:'data.length'">
                {{item.name}}:{{item.data.length}}
              </div>
            

            对于降序,我们需要使用“-”符号(在单引号内)

            <div ng-repeat="item in arrayOfObject | orderBy:'-data.length'">
                {{item.name}}:{{item.data.length}}
              </div>
            

            【讨论】:

              猜你喜欢
              • 2013-05-17
              • 1970-01-01
              • 2021-05-16
              • 1970-01-01
              • 1970-01-01
              • 2022-07-11
              • 1970-01-01
              • 2019-11-10
              • 2018-05-01
              相关资源
              最近更新 更多