Comment trier un tableau d'objets avec jquery ou javascript [dupliquer]

cette question a déjà une réponse ici:

  • Tri d'un tableau d'objets JavaScript 25 réponses

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 ascendant du nom contributif (array[i][1]) ?

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

Aidez-moi!

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

Edit: Pourquoi cette question Est-elle inscrite comme une copie, alors qu'elle a été posée deux ans avant la question "dupliquée"?

196
demandé sur Karoline Brynildsen 2011-03-31 21:33:21

6 réponses

//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);
374
répondu Ketan 2011-03-31 17:38:25
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;
    }
});

la fonction sort prend un argument supplémentaire, une fonction qui prend deux arguments. Cette fonction devrait retourner -1 , 0 ou 1 selon lequel des deux arguments devrait venir en premier dans le tri. Plus d'infos .

j'ai aussi corrigé une erreur de syntaxe dans votre tableau multidimensionnel.

35
répondu Håvard 2011-03-31 17:44:58
//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;
});
26
répondu kennebec 2016-03-31 05:52:08
data.sort(function(a,b) 
{
   return a.val - b.val;
});
14
répondu Wes 2013-09-20 15:16:22

Eh bien, il semble qu'au lieu de créer un véritable tableau multidimensionnel, vous avez créé un tableau d'objets (presque) JavaScript. Essayez de définir vos tableaux comme ceci - >

var array = [ [id,name,value], [id,name,value] ]

espérons que ça aide!

3
répondu Hacknightly 2011-03-31 17:36:09