empList = [
        { "Account": "AAA - 0029", "Available": "$100" },
        { "Account": "BBB- 0146", "Available": "200" },
        { "Account": "AAA - 1812", "Available": "300"},
        { "Account": "CCC- 2019", "Available": "400"},
        { "Account": "FYC- 3810", "Available": "500"},
        { "Account": "HHH- 5210", "Available": "600"},
        ]

Oto moja lista kont i chcę tego posortować numery rosnącymi / malejącymi w nieruchomości konta. Próbowałem różnych metod, ale nic nie działa. Użyłem "-" jako ogranicznik do podzielonego "AAA - 0029".

0
Nani 26 czerwiec 2017, 07:09

5 odpowiedzi

Najlepsza odpowiedź
angular.module('app', [])
.controller('MyController', ['$scope', function($scope) {
    $scope.empList = [
        { "Account": "AAA - 0029", "Available": "$100" },
        { "Account": "BBB- 0146", "Available": "200" },
        { "Account": "AAA - 1812", "Available": "300"},
        { "Account": "CCC- 2019", "Available": "400"},
        { "Account": "FYC- 3810", "Available": "500"},
        { "Account": "HHH- 5210", "Available": "600"},
    ];

    $scope.sorted = $scope.empList.sort((a, b) => a.Account.match(/\d+/) - b.Account.match(/\d+/));    
}]);
<script src="//code.angularjs.org/snapshot/angular.min.js"></script>

<div ng-app='app' ng-controller='MyController'>
  <h3>Sorted via ng-repeat:</h3>
  <input type='button' value='{{"Sort by " + (reverse ? "ascending" : "descending")}}' ng-click='reverse=!reverse'/>
  <ul >
     <li ng-attr-temp='{{item.temp = item.Account.match("\\d+")}}' ng-repeat='item in empList | orderBy: "temp": reverse'>{{item.Account}} : {{item.Available}}</li>
  </ul>
  
  <h3>Static sorted via sort function:</h3>
  {{sorted}}
</div>
0
Slava Utesinov 26 czerwiec 2017, 06:46

To rodzaje w kolejności malejącej:

var res = empList.sort(function(c, n) {
    var cNro = parseInt(c.Account.split('-')[1])
    var nNro = parseInt(n.Account.split('-')[1])
    if (cNro < nNro) {
        return 1
    } else if (cNro > nNro) {
        return -1
    }
    return 0
})
0
paulvs 26 czerwiec 2017, 12:08

Możesz użyć wyrażenia regularnego do uzyskania ostatnich znaków liczbowych ans Użyj obiektu, aby uzyskać odpowiednią funkcję sortowania. Potem sugeruję użycie opakowania do sortowania malejącego.

function sortBy(key, direction) {
    var sortFn = {
            Account: {
                asc: function (a, b) {
                    function getN(s) { return s.match(/\d+$/)[0]; }
                    return getN(a[key]) - getN(b[key]);
                },
            },
            Available: {
                asc: function (a, b) {
                    return a[key] - b[key];
                },
            }
        };
    return sortFn[key][direction || 'asc'] || function (a, b) { return sortFn[key].asc(b, a); };
}

var array = [{ Account: "AAA - 0029", Available: "1000" }, { Account: "BBB- 0146", Available: "200" }, { Account: "AAA - 1812", Available: "300" }, { Account: "CCC- 2019", Available: "400" }, { Account: "FYC- 3810", Available: "500" }, { Account: "HHH- 5210", Available: "600" }];

array.sort(sortBy('Account'));
console.log(array);

array.sort(sortBy('Account', 'desc'));
console.log(array);

array.sort(sortBy('Available'));
console.log(array);

array.sort(sortBy('Available', 'desc'));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0
Nina Scholz 26 czerwiec 2017, 07:07

Spowoduje to sortowanie według numeru konta

empList = [
        { "Account": "AAA - 0029", "Available": "$100" },
        { "Account": "BBB- 0146", "Available": "200" },
        { "Account": "AAA - 1812", "Available": "300"},
        { "Account": "CCC- 2019", "Available": "400"},
        { "Account": "FYC- 3810", "Available": "500"},
        { "Account": "HHH- 5210", "Available": "600"},
        ];
        
var sorted = empList.sort(function(a,b) {
    var x = a.Account.split('- ')[1];
    var y = b.Account.split('- ')[1];
    return x < y ? -1 : x > y ? 1 : 0;
   });
   
console.log(sorted);
0
Chava Geldzahler 26 czerwiec 2017, 04:38

Wypróbuj ten kod, podzielony za pomocą "" i miał posortowane liczby.

var  empList = [
        { "Account": "AAA - 0029", "Available": "$100" },
        { "Account": "CCC - 2019", "Available": "400"},
         { "Account": "BBB - 0146", "Available": "200" },
        { "Account": "FYC - 3810", "Available": "500"},
        { "Account": "AAA - 1812", "Available": "300"},
        { "Account": "HHH - 5210", "Available": "600"},
        ];
        
        
empList.sort(function(a,b){

var aNumber=a.Account.split(" ");
var bNumber=b.Account.split(" ");
return Number(aNumber[aNumber.length-1])-Number(bNumber[bNumber.length-1]);
});

console.log(empList);
0
Srinivas ML 26 czerwiec 2017, 04:36