Maison  >  Questions et réponses  >  le corps du texte

Trier les propriétés des objets en fonction de leur valeur

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粉930448030P粉930448030376 Il y a quelques jours553

répondre à tous(2)je répondrai

  • P粉605385621

    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

    répondre
    0
  • P粉415632319

    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);

    répondre
    0
  • Annulerrépondre