Disons que j'ai un objet:
{Derp: 17, Herp: 2, Asd: 5, Foo: 8, Qwe: 12}
Et je dois le trier par valeur. Ce que je cherche à obtenir, c'est:
{Derp: 17, Qwe: 12, Foo: 8, Asd: 5, Herp: 2}
Je voudrais utiliser lodash pour cela. Lorsque j'utilise _.sortBy
il ne conserve cependant pas les clés:
_.sortBy({Derp: 17, Herp: 2, Asd: 5, Foo: 8, Qwe: 12}).reverse();
// [17, 12, 8, 5, 2]
Enfer, je me contenterais même du tableau de clés, mais toujours trié par la valeur en entrée:
['Derp', 'Herp', 'Foo', 'Asd', 'Qwe']
Vous pourriez essayer comme ça,
_.mapValues(_.invert(_.invert(obj)),parseInt);
Objet {Herp: 2, Asd: 5, Foo: 8, Qwe: 12, Derp: 17}
ou
var obj = {Derp: 17, Herp: 2, Asd: 5, Foo: 8, Qwe: 12}
var result = _.reduceRight(_.invert(_.invert(obj)), function(current, val, key){
current[key] = parseInt(val);
return current;
},{});
Objet {Derp: 17, Qwe: 12, Foo: 8, Asd: 5, Herp: 2}
ou en utilisant des méthodes de chaîne:
_.chain(obj).invert().invert().reduceRight(function(current, val, key){
current[key] = parseInt(val);
return current;
},{}).value()
Objet {Derp: 17, Qwe: 12, Foo: 8, Asd: 5, Herp: 2}
Remarque: Cela dépend du navigateur, généralement, l'ordre des propriétés des objets n'est pas garanti dans la plupart des cas.
Je luttais avec un problème similaire et j'ai pu le résoudre en faisant des transformations avec lodash. Pour votre problème ce serait:
let doo = {Derp: 17, Herp: 2, Asd: 5, Foo: 8, Qwe: 12};
let foo = _.chain(doo)
.map((val, key) => {
return { name: key, count: val }
})
.sortBy('count')
.reverse()
.keyBy('name')
.mapValues('count')
.value();
console.log(foo);
// Derp: 17, Qwe: 12, Foo: 8, Asd: 5, Herp: 2 }