Rumah  >  Soal Jawab  >  teks badan

Isih sifat objek berdasarkan nilainya

Jika saya mempunyai objek JavaScript seperti:

var list = {
  "you": 100, 
  "me": 75, 
  "foo": 116, 
  "bar": 15
};

Adakah terdapat cara untuk mengisih hartanah berdasarkan nilai? Jadi saya akhirnya mendapat

list = {
  "bar": 15, 
  "me": 75, 
  "you": 100, 
  "foo": 116
};


P粉930448030P粉930448030376 hari yang lalu551

membalas semua(2)saya akan balas

  • P粉605385621

    P粉6053856212023-10-10 09:15:01

    Kami tidak mahu menyalin keseluruhan struktur data atau menggunakan tatasusunan yang memerlukan tatasusunan bersekutu.

    Ini satu lagi cara untuk melakukan perkara yang sama seperti 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

    balas
    0
  • P粉415632319

    P粉4156323192023-10-10 00:40:23

    Alihkannya ke dalam tatasusunan, susun tatasusunan dan gunakan tatasusunan itu untuk tujuan anda. Penyelesaiannya adalah seperti berikut:

    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]]

    Setelah anda mempunyai tatasusunan, anda boleh membina semula objek daripada tatasusunan dalam sebarang susunan yang anda suka, mencapai apa yang anda mahu lakukan. Ini berfungsi dalam semua penyemak imbas yang saya ketahui, tetapi ia bergantung pada kebiasaan pelaksanaan dan mungkin pecah pada bila-bila masa. Anda tidak boleh membuat andaian tentang susunan elemen dalam objek JavaScript.

    let objSorted = {}
    sortable.forEach(function(item){
        objSorted[item[0]]=item[1]
    })

    Dalam ES8 anda boleh menukar objek kepada tatasusunan menggunakan 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);

    balas
    0
  • Batalbalas