199 votes

Comment trier un tableau d'objets avec jquery ou javascript ?

J'ai un tableau d'objets :

var array = [(id, name, value),(id, name, value)]; //and so on

Comment faire pour que le tableau soit trié dans l'ordre croissant du nom de l'attribut ? (array[i][1]) ?

J'ai essayé de le faire : array[i][1].sort() mais ça ne marche pas.

Aidez-moi, s'il vous plaît !

Edit : le tableau peut contenir plus de deux objets ! Il peut en contenir des centaines.

Edit : Pourquoi cette question est-elle marquée comme étant un doublon, alors qu'elle a été posée 2 ans avant la question "doublon" ?

390voto

Ketan Points 1910
//This will sort your array
function SortByName(a, b){
  var aName = a.name.toLowerCase();
  var bName = b.name.toLowerCase(); 
  return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
}

array.sort(SortByName);

38voto

Håvard Points 5534
var array = [[1, "grape", 42], [2, "fruit", 9]];

array.sort(function(a, b)
{
    // a and b will here be two objects from the array
    // thus a[1] and b[1] will equal the names

    // if they are equal, return 0 (no sorting)
    if (a[1] == b[1]) { return 0; }
    if (a[1] > b[1])
    {
        // if a should come after b, return 1
        return 1;
    }
    else
    {
        // if b should come after a, return -1
        return -1;
    }
});

El sort prend un argument supplémentaire, une fonction qui prend deux arguments. Cette fonction doit retourner -1 , 0 o 1 en fonction de celui des deux arguments qui doit venir en premier dans le tri. Plus d'informations .

J'ai également corrigé une erreur de syntaxe dans votre tableau multidimensionnel.

27voto

kennebec Points 33886
//objects
var array = [{id:'12', name:'Smith', value:1},{id:'13', name:'Jones', value:2}];
array.sort(function(a, b){
    var a1= a.name.toLower(), b1= b.name.toLower();
    if(a1== b1) return 0;
    return a1> b1? 1: -1;
});

//arrays
var array =[ ['12', ,'Smith',1],['13', 'Jones',2]];
array.sort(function(a, b){
    var a1= a[1], b1= b[1];
    if(a1== b1) return 0;
    return a1> b1? 1: -1;
});

18voto

Wes Points 40
data.sort(function(a,b) 
{
   return a.val - b.val;
});

11voto

Mike Lewis Points 29305

Le site méthode de tri contient un argument facultatif pour passer une fonction de comparaison personnalisée.

En supposant que vous vouliez un tableau de tableaux :

var arr = [[3, "Mike", 20],[5, "Alex", 15]];

function compareName(a, b)
{

  if (a[1] < b[1]) return -1;
  if (a[1] > b[1]) return 1;
  return 0;
}
arr.sort(compareName);

Sinon, si vous voulez un tableau d'objets, vous pouvez le faire :

function compareName(a, b)
{

  if (a.name < b.name) return -1;
  if (a.name > b.name) return 1;
  return 0;
}

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