1579 votes

Trier un tableau d'objets JavaScript

J'ai lu les objets suivants en utilisant Ajax et je les ai stockés dans un tableau :

var homes = [
    {
        "h_id": "3",
        "city": "Dallas",
        "state": "TX",
        "zip": "75201",
        "price": "162500"
    }, {
        "h_id": "4",
        "city": "Bevery Hills",
        "state": "CA",
        "zip": "90210",
        "price": "319250"
    }, {
        "h_id": "5",
        "city": "New York",
        "state": "NY",
        "zip": "00010",
        "price": "962500"
    }];

Comment puis-je créer une fonction pour trier les price dans le champ ascendant et être en mesure de les trier dans l'ordre suivant descendant en utilisant uniquement JavaScript ?

2027voto

Stobor Points 15428
homes.sort(function(a,b) { return parseFloat(a.price) - parseFloat(b.price) } );

710voto

Triptych Points 70247

Voici une version plus souple, qui vous permet de créer des fonctions de tri réutilisables, et de trier par n'importe quel champ.

var sort_by = function(field, reverse, primer){

   var key = primer ? 
       function(x) {return primer(x[field])} : 
       function(x) {return x[field]};

   reverse = [-1, 1][+!!reverse];

   return function (a, b) {
       return a = key(a), b = key(b), reverse * ((a > b) - (b > a));
     } 
}

Maintenant vous pouvez trier par n'importe quel champ à volonté...

var homes = [{

   "h_id": "3",
   "city": "Dallas",
   "state": "TX",
   "zip": "75201",
   "price": "162500"

}, {

   "h_id": "4",
   "city": "Bevery Hills",
   "state": "CA",
   "zip": "90210",
   "price": "319250"

}, {

   "h_id": "5",
   "city": "New York",
   "state": "NY",
   "zip": "00010",
   "price": "962500"

}];

// Sort by price high to low
homes.sort(sort_by('price', true, parseInt));

// Sort by city, case-insensitive, A-Z
homes.sort(sort_by('city', false, function(a){return a.toUpperCase()}));

147voto

rmarimon Points 4021

Pour le trier, vous devez créer une fonction de comparaison prenant deux arguments, puis appeler la fonction de tri avec cette fonction de comparaison comme suit :

// a and be are object elements of your array
function mycomparator(a,b) {
  return parseInt(a.price) - parseInt(b.price);

}

Si vous voulez trier par ordre croissant, changez parseInt(a.price) - parseInt(b.price) à parseInt(b.price) - parseInt(a.price) . Notez le passage de a à b.

Pour faire le tri

homes.sort(mycomparator);

74voto

Ishan Liyanage Points 131

pour le tri des chaînes de caractères, au cas où quelqu'un en aurait besoin,

var dataArr = {  

    "hello": [{
    "id": 114,
    "keyword": "zzzzzz",
    "region": "Sri Lanka",
    "supportGroup": "administrators",
    "category": "Category2"
}, {
    "id": 115,
    "keyword": "aaaaa",
    "region": "Japan",
    "supportGroup": "developers",
    "category": "Category2"
}]

};
var sortArray = dataArr['hello'];
sortArray.sort(function(a,b) {
    if ( a.region < b.region )
        return -1;
    if ( a.region > b.region )
        return 1;
    return 0;
} );

26voto

Tim Gilbert Points 1426

Vous voulez le trier en Javascript, non ? Ce que vous voulez, c'est le sort() fonction . Dans ce cas, vous devez écrire une fonction de comparaison et la transmettre à sort() donc quelque chose comme ça :

function comparator(a, b) {
    return parseInt(a["price"]) > parseInt(b["price"]);
}

var json = { "homes": [ /* your previous data */ ] };
console.log(json["homes"].sort(comparator));

Votre comparateur prend un de chacun des hachages imbriqués dans le tableau et décide lequel est le plus élevé en vérifiant le champ "prix".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X