75 votes

Trier un objet JavaScript par nom de propriété

Cela fait un moment que je cherche un moyen de trier un objet Javascript comme ceci :

{
    method: 'artist.getInfo',
    artist: 'Green Day',
    format: 'json',
    api_key: 'fa3af76b9396d0091c9c41ebe3c63716'
}

et trier par ordre alphabétique par nom pour obtenir :

{
    api_key: 'fa3af76b9396d0091c9c41ebe3c63716',
    artist: 'Green Day',
    format: 'json',
    method: 'artist.getInfo'
}

Je ne trouve pas de code qui permette de faire ça. Quelqu'un peut-il me donner de l'aide ?

0 votes

javascriptkit.com/javatutors/arraysort.shtml - Tutoriel décent sur le tri d'objets JS complexes. highdots.com/forums/javascript/re-sorting-json-data-270187.html - Un autre exemple --- Voici une référence complète sur la fonction de tri si vous voulez les détails developer.mozilla.org/fr/Core_JavaScript_1.5_Reference/ -Dernier montage, je le jure !

0 votes

Le problème que je rencontre est que ces articles montrent comment trier un tableau d'objets. J'essaie de trier un objet rempli d'objets. Les mêmes exemples fonctionneront-ils dans mon cas ? Si oui, pouvez-vous me donner un exemple ? Désolé, je suis vraiment bloqué sur ce sujet :s

7 votes

Il s'agit d'une question ancienne, mais je suis un pédant, alors pour la milliardième fois : il n'existe pas d'objet JSON - du moins, pas de la manière dont vous y faites référence. Il y a des objets javascript et des chaînes JSON.

2voto

splashout Points 61

Compatible ES5 :

function sortByKey(obj) {
    var keys = Object.keys(obj);
    keys.sort();
    var sorted = {};
    for (var i = 0; i < keys.length; i++) {
        var key = keys[i];
        sorted[key] = obj[key];
    }
    return sorted;
}

0voto

Pierre Maoui Points 346

Ceci doit être utilisé avec prudence car votre code ne doit pas dépendre de l'ordre des propriétés des objets. Si c'est juste une question de présentation (ou juste pour le plaisir !), vous pouvez trier les propriétés en profondeur comme ceci :

function sortObject(src) {
  var out;
  if (typeof src === 'object' && Object.keys(src).length > 0) {
    out = {};
    Object.keys(src).sort().forEach(function (key) {
      out[key] = sortObject(src[key]);
    });
    return out;
  }
  return src;
}

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