Jika saya memiliki objek JavaScript seperti:
var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15
};
Apakah ada cara untuk mengurutkan properti berdasarkan nilai? Sehingga saya berakhir dengan
list = {
"bar": 15,
"me": 75,
"you": 100,
"foo": 116
};
javascript
sorting
properties
object
Steerpike
sumber
sumber
Object.entries
jawaban berbasis- hampir tidak terJawaban:
Pindahkan mereka ke array, susun array itu, dan kemudian gunakan array itu untuk tujuan Anda. Inilah solusinya:
Setelah Anda memiliki array, Anda bisa membangun kembali objek dari array dalam urutan yang Anda suka, sehingga mencapai apa yang Anda ingin lakukan. Itu akan bekerja di semua browser yang saya tahu, tetapi itu akan tergantung pada kekhasan implementasi, dan bisa pecah kapan saja. Anda tidak boleh membuat asumsi tentang urutan elemen dalam objek JavaScript.
sumber
keys()
hanya didukung oleh IE9 + (dan browser modern lainnya), jika itu menjadi perhatian. Jugakeys()
mengecualikan properti enumerable dari rantai prototipe elemen (tidak seperti untuk .. dalam) - tetapi itu biasanya lebih diinginkan._.pairs
mengubah objek menjadi [[key1, value1], [key2, value2]]. Lalu panggil semacam itu. Kemudian panggil_.object
untuk mengembalikannya.Kami tidak ingin menduplikasi seluruh struktur data, atau menggunakan array di mana kami membutuhkan array asosiatif.
Berikut cara lain untuk melakukan hal yang sama dengan bonna:
sumber
keysSorted
adalah sebuah array! Bukan benda!.map(key => list[key]);
ke akhir semacam itu, itu akan mengembalikan seluruh objek, bukan hanya kunciObjek Anda dapat memiliki jumlah properti apa pun dan Anda dapat memilih untuk mengurutkan berdasarkan properti objek apa pun yang Anda inginkan, jumlah atau string, jika Anda meletakkan objek dalam array. Pertimbangkan array ini:
urutkan berdasarkan tanggal lahir, terlama lebih dulu
diurutkan berdasarkan nama
http://jsfiddle.net/xsM5s/16/
sumber
substr
karakter pertama; lainDiana
danDebra
memiliki pesanan yang tidak ditentukan. Selain itu,byDate
jenis Anda sebenarnya menggunakannum
, bukanborn
.x.localeCompare(y)
localCompare
terlihat seperti fungsi yang sangat berguna! Harap perhatikan bahwa itu tidak akan didukung di setiap browser - IE 10 dan kurang, Safari Mobile 9 dan kurang.Demi kelengkapan, fungsi ini mengembalikan array properti objek yang diurutkan :
Jsfiddle dengan kode di atas ada di sini . Solusi ini didasarkan pada artikel ini .
Biola yang diperbarui untuk menyortir string ada di sini. Anda dapat menghapus kedua konversi .toLowerCase () tambahan dari itu untuk perbandingan string case sensitif.
sumber
ECMAScript 2017 memperkenalkan
Object.values / Object.entries
. Seperti namanya, yang pertama mengumpulkan semua nilai dari suatu objek ke dalam array, dan yang terakhir melakukan keseluruhan objek ke dalam array[key, value]
array; Setara dengan Pythondict.values()
dandict.items()
.Fitur-fiturnya membuatnya lebih mudah untuk memilah hash ke dalam objek yang dipesan. Sampai sekarang, hanya sebagian kecil platform JavaScript yang mendukungnya , tetapi Anda dapat mencobanya di Firefox 47+.
sumber
Sorting JavaScript Object by property value
? Anda salah mengerti pertanyaan saya pikir, karena Anda harus mengubah Objek asli dan tidak membuat Array baru dari itu.Versi "panah" dari jawaban @marcusR untuk referensi
UPDATE: April 2017 - Ini mengembalikan
myObj
objek yang diurutkan yang ditentukan di atas.Coba di sini!
PEMBARUAN: Oktober 2018 - Versi Object.entries
Coba di sini!
sumber
var myObj = {"1": {"Value": 40}, "2": {"Value": 10}, "3": {"Value": 30}, "4": {"Value": 20}};
entries
. Menurut standar, objek adalah kumpulan properti yang tidak berurutan . Nah, itu berarti jika Anda mencoba untuk membangun objek baru setelah mengurutkannya berdasarkan nilai properti atau apa pun, pemesanan kunci properti menjadi tidak terdefinisi lagi. Chrome, misalnya, secara default memesan kunci properti, sehingga setiap upaya untuk memesannya secara berbeda tidak berguna. Satu-satunya kesempatan Anda adalah untuk mendapatkan "indeks" berdasarkan preferensi pemesanan Anda dan melintasi objek aslinya sesuai.sort()
padaObject.entries()
Objek JavaScript tidak berurutan menurut definisi (lihat Spesifikasi Bahasa ECMAScript , bagian 8.6). Spesifikasi bahasa bahkan tidak menjamin bahwa, jika Anda mengulangi properti dua kali berturut-turut, mereka akan keluar dalam urutan yang sama untuk kedua kalinya.
Jika Anda perlu memesan sesuatu, gunakan array dan metode Array.prototype.sort.
sumber
OK , seperti yang Anda ketahui, javascript memiliki fungsi sort () , untuk mengurutkan array, tetapi tidak untuk objek ...
Jadi dalam hal ini, kita perlu entah bagaimana mendapatkan array kunci dan mengurutkannya, itulah alasan apis memberi Anda objek dalam array sebagian besar waktu, karena Array memiliki lebih banyak fungsi asli untuk bermain dengan mereka daripada objek literal, bagaimanapun, solusi cepat menggunakan Object.key yang mengembalikan array dari kunci objek, saya membuat fungsi ES6 di bawah ini yang melakukan pekerjaan untuk Anda, ia menggunakan fungsi sort asli () dan mengurangi () dalam javascript:
Dan sekarang Anda dapat menggunakannya seperti ini:
Periksa objek sortir MyOb dan Anda dapat melihat hasilnya diurutkan dengan kunci seperti ini:
Juga dengan cara ini, objek utama tidak akan disentuh dan kami benar-benar mendapatkan objek baru.
Saya juga membuat gambar di bawah ini, untuk membuat langkah-langkah fungsi lebih jelas, jika Anda perlu mengubahnya sedikit untuk bekerja dengan cara Anda:
sumber
c: 3
kec: 13
dan Anda akan melihatnya berantakan.sumber
Perbarui dengan ES6: Jika kekhawatiran Anda memiliki objek yang diurutkan untuk beralih melalui (itulah sebabnya saya membayangkan Anda ingin properti objek Anda diurutkan), Anda dapat menggunakan Peta objek .
Anda dapat memasukkan pasangan (kunci, nilai) Anda dalam urutan yang diurutkan dan kemudian melakukan
for..of
loop akan menjamin memiliki mereka loop dalam urutan yang Anda masukkan.sumber
for-in
atauObject.keys
, tetapi ini didefinisikan harus dihormati olehObject.getOwnPropertyNames
dan metode baru lainnya untuk mengakses array nama properti. Jadi itu pilihan lain.Map
Anda sebenarnya memiliki struktur data yang dapat menyimpan dalam urutan yang diurutkan (mengurutkan data Anda, mengulanginya dan menyimpannya di peta) di mana Anda tidak dijamin dengan benda.Underscore.js atau Lodash.js untuk array atau objek tingkat lanjut
demo
sumber
Sangat singkat dan sederhana!
sumber
Saya mengikuti solusi yang diberikan oleh slebetman (baca untuk semua detailnya), tetapi disesuaikan, karena objek Anda tidak bersarang.
sumber
Mengurutkan nilai tanpa banyak for-loop (untuk mengurutkan berdasarkan kunci, ubah indeks pada sortir callback ke "0")
sumber
Ini bisa menjadi cara sederhana untuk menanganinya sebagai objek yang diperintahkan nyata. Tidak yakin seberapa lambat itu. juga mungkin lebih baik dengan loop sementara.
Dan kemudian saya menemukan fungsi terbalik ini dari: http://nelsonwells.net/2011/10/swap-object-key-and-values-in-javascript/
Begitu
sumber
output = [{p: 8}, {c: 2}, {b: 1}, {g: 1}]
sumber
Untuk berjaga-jaga, seseorang mencari untuk menjaga objek (dengan kunci dan nilai), menggunakan referensi kode oleh @Markus R dan komentar @James Moran, cukup gunakan:
sumber
map
,forEach
akan lebih baikKeluaran:
sumber
banyak fungsi yang serupa dan bermanfaat: https://github.com/shimondoodkin/groupbyfunctions/
sumber
Objek diurutkan berdasarkan nilai (DESC)
sumber
Ini satu contoh lagi:
sumber
sumber
TypeScript
Fungsi berikut mengurutkan objek berdasarkan nilai atau properti nilai. Jika Anda tidak menggunakan TypeScript, Anda dapat menghapus informasi jenis untuk mengubahnya menjadi JavaScript.
Pemakaian
Urutan kunci dalam objek JavaScript tidak dijamin, jadi saya menyortir dan mengembalikan hasilnya sebagai
Map
objek yang mempertahankan urutan pengurutan.Jika Anda ingin mengubahnya kembali ke Object, Anda dapat melakukan ini:
sumber
input adalah objek, output adalah objek, menggunakan lib bawaan & js bawaan, dengan opsi menurun atau naik, dan tidak bermutasi objek input
misalnya input & output
Pelaksanaan
sumber
sumber
solusi saya dengan mengurutkan:
sumber
sumber
Cara lain untuk mengatasi ini: -
// res akan memiliki array hasil
sumber
Terima kasih dan lanjutkan jawab @Nosredna
Sekarang kita mengerti objek perlu dikonversi ke array kemudian mengurutkan array. ini berguna untuk mengurutkan array (atau objek yang dikonversi ke array) dengan string:
sumber
Coba ini. Bahkan objek Anda tidak memiliki properti berdasarkan yang Anda coba untuk mengurutkan juga akan ditangani.
Sebut saja dengan mengirim properti dengan objek.
sumber