117 votes

Existe-t-il un moyen de trier/ordonner les clés dans les objets JavaScript ?

Par exemple ce qui suit

 var data = {
    'States': ['NSW', 'VIC'],
    'Countries': ['GBR', 'AUS'],
    'Capitals': ['SYD', 'MEL']
}
for (var item in data) {
    console.log(item);
}

impressions

 States
Countries
Capitals

Existe-t-il un moyen de trier par ordre alphabétique pour qu'il imprime

 Capitals
Countries
States

57voto

mac Points 329

voici une belle solution fonctionnelle :

essentiellement,

  1. extraire les clés dans une liste avec Object.keys
  2. sort les clés
  3. réduire la liste à un objet pour obtenir le résultat souhaité

Solution ES5 :

 not_sorted = {b: false, a: true};

sorted = Object.keys(not_sorted)
    .sort()
    .reduce(function (acc, key) { 
        acc[key] = not_sorted[key];
        return acc;
    }, {});

console.log(sorted) //{a: true, b: false}

Solution ES6 :

 not_sorted = {b: false, a: true}

sorted = Object.keys(not_sorted)
    .sort()
    .reduce((acc, key) => ({
        ...acc, [key]: not_sorted[key]
    }), {})

console.log(sorted) //{a: true, b: false}

3voto

Jinksi Points 61

Voici un one-liner pour trier les clés d'un objet à l'aide de lodash

 _.chain(obj).toPairs().sortBy(0).fromPairs().value()

Avec vos exemples de données :

 var data = {
    'States': ['NSW', 'VIC'],
    'Countries': ['GBR', 'AUS'],
    'Capitals': ['SYD', 'MEL']
}
data = _.chain(data)
  .toPairs() // turn the object into an array of [key, value] pairs
  .sortBy(0) // sort these pairs by index [0] which is [key]
  .fromPairs() // convert array of pairs back into an object {key: value}
  .value() // return value
/*
{
  Capitals: [ 'SYD', 'MEL' ],
  Countries: [ 'GBR', 'AUS' ],
  States: [ 'NSW', 'VIC' ]
}
*/

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