Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
278 views
in Technique[技术] by (71.8m points)

sorting - How to sort multidimensional array level 1 according to level 2 value in angularjs

How to sort multidimensional array level one according to level two value in angularjs

Is there any angularjs built-in function which will sort this array level two by 'sort_order' value? I have found several sollutions, but all of them sorted as per requiremnt.

{
      "Headers": [{  "TypeId": 1,  "TypeName": "A",  "OrderNo": 1},{  "TypeId": 2,  "TypeName": "V",  "OrderNo": 2},{  "TypeId": 3,  "TypeName": "C",  "OrderNo": 3},{  "TypeId": 4,  "TypeName": "N",  "OrderNo": 4},{  "TypeId": 5,  "TypeName": "O",  "OrderNo": 5}  ],
      "Rows": [{"Activities": [{"TypeId": 1,"Data": 90},{"TypeId": 3,"Data": 10},{"TypeId": 1,"Data": 1275},{"TypeId": 4,"Data": 5},{"TypeId": 5,"Data": 0}  ],  "Id": 165,  "Name": "A"},{  "Activities": [{"TypeId": 3,"Data": 30},{"TypeId": 1,"Data": 1045},{"TypeId": 2,"Data": 70},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 325,  "Name": "B"},{  "Activities": [{"TypeId": 3,"Data": 5},{"TypeId": 1,"Data": 640},{"TypeId": 2,"Data": 5},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 7,  "Name": "B"},{  "Activities": [{"TypeId": 3,"Data": 80},{"TypeId": 1,"Data": 3045},{"TypeId": 4,"Data": 5},{"TypeId": 2,"Data": 260},{"TypeId": 5,"Data": 0}  ],  "Id": 102,  "Name": "C"},{  "Activities": [{"TypeId": 3,"Data": 5},{"TypeId": 1,"Data": 845},{"TypeId": 4,"Data": 5},{"TypeId": 5,"Data": 85},{"TypeId": 2,"Data": 45}  ],  "Id": 28,  "Name": "D"},{  "Activities": [{"TypeId": 2,"Data": 55},{"TypeId": 3,"Data": 20},{"TypeId": 1,"Data": 2175},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 103,  "Name": "El"},{  "Activities": [{"TypeId": 1,"Data": 1330},{"TypeId": 2,"Data": 40},{"TypeId": 3,"Data": 10},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 93,  "Name": "Ca"}  ]
    }

var app = angular.module('angApp', ['angular.filter']);
  
app.controller('Cntrl1', Cntrl1);
Cntrl1.$inject = ['$scope', '$filter'];
function Cntrl1($scope, $filter) {
  var vm = this;
   var data = {
  "Headers": [{  "TypeId": 1,  "TypeName": "A",  "OrderNo": 1},{  "TypeId": 2,  "TypeName": "V",  "OrderNo": 2},{  "TypeId": 3,  "TypeName": "C",  "OrderNo": 3},{  "TypeId": 4,  "TypeName": "N",  "OrderNo": 4},{  "TypeId": 5,  "TypeName": "O",  "OrderNo": 5}  ],
  "Rows": [{"Activities": [{"TypeId": 1,"Data": 90},{"TypeId": 3,"Data": 10},{"TypeId": 1,"Data": 1275},{"TypeId": 4,"Data": 5},{"TypeId": 5,"Data": 0}  ],  "Id": 165,  "Name": "A"},{  "Activities": [{"TypeId": 3,"Data": 30},{"TypeId": 1,"Data": 1045},{"TypeId": 2,"Data": 70},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 325,  "Name": "B"},{  "Activities": [{"TypeId": 3,"Data": 5},{"TypeId": 1,"Data": 640},{"TypeId": 2,"Data": 5},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 7,  "Name": "B"},{  "Activities": [{"TypeId": 3,"Data": 80},{"TypeId": 1,"Data": 3045},{"TypeId": 4,"Data": 5},{"TypeId": 2,"Data": 260},{"TypeId": 5,"Data": 0}  ],  "Id": 102,  "Name": "C"},{  "Activities": [{"TypeId": 3,"Data": 5},{"TypeId": 1,"Data": 845},{"TypeId": 4,"Data": 5},{"TypeId": 5,"Data": 85},{"TypeId": 2,"Data": 45}  ],  "Id": 28,  "Name": "D"},{  "Activities": [{"TypeId": 2,"Data": 55},{"TypeId": 3,"Data": 20},{"TypeId": 1,"Data": 2175},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 103,  "Name": "El"},{  "Activities": [{"TypeId": 1,"Data": 1330},{"TypeId": 2,"Data": 40},{"TypeId": 3,"Data": 10},{"TypeId": 4,"Data": 0},{"TypeId": 5,"Data": 0}  ],  "Id": 93,  "Name": "Ca"}  ]
};

vm.Headers = data.Headers;
vm.Rows = data.Rows;

vm.Sort = function (sortBy) {
  vm.SortDir = vm.SortDir == 'desc' ? 'asc' : 'desc';
  if (sortBy == 'Name') {
      vm.Rows = $filter('orderBy')(vm.Rows, sortBy, vm.SortDir == 'desc');
  } else {                
      vm.Rows = $filter('orderBy')(vm.Rows, sortBy, vm.SortDir == 'desc');
  }
}

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.7.5/angular.min.js"></script>
<div ng-app="angApp" ng-controller="Cntrl1 as vm">
<table id="table" class="table table-bordered table-hover table-striped">
                                <thead>
                                    <tr class="bg-light-gray text-uppercase">
                                        <th>#</th>
                                        <th class="w-50"> <a href="javascript:void(0)" ng-click="vm.Sort('Name')">Name</a></th>
                                        <th ng-repeat="item in vm.Headers" class="text-right">
                                            <a href="javascript:void(0)" ng-click="vm.Sort('Activities.Data')">{{item.TypeName}}</a>
                                        </th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <tr ng-repeat="b in vm.Rows">
                                        <td>{{$index+1}}</td>
                                        <td>{{b.Name}}</td>
                                        <td ng-repeat="item in b.Activities" >{{item.Data}}</td>
                                    </tr>
                                </tbody>
                            </table>
                            </div>
question from:https://stackoverflow.com/questions/65623028/how-to-sort-multidimensional-array-level-1-according-to-level-2-value-in-angular

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...