Isih sifat objek berdasarkan nilainya
P粉930448030
P粉930448030 2023-10-09 10:03:13
0
2
585

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粉930448030
P粉930448030

membalas semua(2)
P粉605385621

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
P粉415632319

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);
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan