Maison > Questions et réponses > le corps du texte
Si j'ai un objet JavaScript comme :
var list = { "you": 100, "me": 75, "foo": 116, "bar": 15 };
Existe-t-il un moyen de trier les propriétés en fonction de leur valeur ? Alors j'ai fini par avoir
list = { "bar": 15, "me": 75, "you": 100, "foo": 116 };
P粉6053856212023-10-10 09:15:01
Nous ne voulons pas copier la structure entière des données, ni utiliser un tableau là où un tableau associatif est requis.
Voici une autre façon de faire la même chose que bonna :
var list = {"you": 100, "me": 75, "foo": 116, "bar": 15}; keysSorted = Object.keys(list).sort(function(a,b){return list[a]-list[b]}) console.log(keysSorted); // bar,me,you,foo
P粉4156323192023-10-10 00:40:23
Déplacez-les dans un tableau, triez le tableau et utilisez ce tableau à vos fins. La solution est la suivante :
let maxSpeed = { car: 300, bike: 60, motorbike: 200, airplane: 1000, helicopter: 400, rocket: 8 * 60 * 60 }; let sortable = []; for (var vehicle in maxSpeed) { sortable.push([vehicle, maxSpeed[vehicle]]); } sortable.sort(function(a, b) { return a[1] - b[1]; }); // [["bike", 60], ["motorbike", 200], ["car", 300], // ["helicopter", 400], ["airplane", 1000], ["rocket", 28800]]
Une fois que vous avez le tableau, vous pouvez reconstruire les objets du tableau dans l'ordre de votre choix, réalisant exactement ce que vous voulez faire. Cela fonctionne dans tous les navigateurs que je connais, mais cela dépend des bizarreries de mise en œuvre et peut tomber en panne à tout moment. Vous ne devez jamais faire d'hypothèses sur l'ordre des éléments dans un objet JavaScript.
let objSorted = {} sortable.forEach(function(item){ objSorted[item[0]]=item[1] })
Dans ES8, vous pouvez convertir un objet en tableau en utilisant Object.entries()
:
const maxSpeed = {
car: 300,
bike: 60,
motorbike: 200,
airplane: 1000,
helicopter: 400,
rocket: 8 * 60 * 60
};
const sortable = Object.entries(maxSpeed)
.sort(([,a],[,b]) => a-b)
.reduce((r, [k, v]) => ({ ...r, [k]: v }), {});
console.log(sortable);