Как создать функцию сортировки custum для ng-grid angularjs

тип ng-сетки по умолчанию не является буквенно-цифровым. можно ли применить специальную функцию сортировки для получения правильной сортировки, например:

'11' '2' 'eé' 'ed' => '2' '11' 'ed' 'eé'

2 ответа

Вы можете определить свою собственную функцию сортировки.

Вот пример с вашими данными. (Исправлено с использованием алгоритма естественной сортировки Девина Торреса)

var myAwesomeSortFn = function(a,b){

 var NUMBER_GROUPS = /(-?\d*\.?\d+)/g;

 var myAwesomeSortFn = function(a, b) {

 var aa = String(a).split(NUMBER_GROUPS),
 bb = String(b).split(NUMBER_GROUPS),
 min = Math.min(aa.length, bb.length);

 for (var i = 0; i < min; i++) {
 var x = parseFloat(aa[i]) || aa[i].toLowerCase(),
 y = parseFloat(bb[i]) || bb[i].toLowerCase();
 if (x < y) return -1;
 else if (x > y) return 1;
 }

 return 0;
};

$scope.myData = [{name: "Moroni", age: 11},
 {name: "Tiancum", age: 2},
 {name: "Jacob", age: 'eé'},
 {name: "Nephi", age: 'ed'}]; 
$scope.gridOptions = { 
 data: 'myData',
 columnDefs: [{field: 'name', displayName: 'Name'}, {field:'age', displayName:'Age', sortFn: myAwesomeSortFn}]
};


Вот что я имею до сих пор:

$scope.links = {
 sortFun: function(a, b) { console.log('a:' + a + ', b: ' + b); }
 };

...


$scope.data.grid.columnDefs.push(
 {'field': key, 'sortingAlgorithm': $scope.links.sortFun }
); 

...
$scope.data.grid.columnDefs.push({'field': key, 'sortingAlgorithm': $scope.links.sortFun });

licensed under cc by-sa 3.0 with attribution.