Saya mendapat sebuah array (lihat di bawah untuk satu objek dalam array) yang perlu saya urutkan berdasarkan nama depan menggunakan JavaScript. Bagaimana saya bisa melakukannya?
var user = {
bio: null,
email: "[email protected]",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
javascript
Jonathan Clark
sumber
sumber
Jawaban:
Misalkan Anda memiliki array
users
. Anda dapat menggunakanusers.sort
dan meneruskan fungsi yang membutuhkan dua argumen dan membandingkannya (pembanding)Itu harus kembali
Dalam kasus kami jika dua elemen adalah
a
danb
kami ingin membandingkana.firstname
danb.firstname
Contoh:
Kode ini akan bekerja dengan tipe apa pun.
Perhatikan bahwa dalam "kehidupan nyata" ™ Anda sering ingin mengabaikan huruf besar-kecil, urutkan dengan benar diakritik, simbol aneh seperti ß, dll saat Anda membandingkan string, jadi Anda mungkin ingin menggunakannya
localeCompare
. Lihat jawaban lain untuk kejelasan.sumber
localeCompare
.Kode terpendek dengan ES6!
String.prototype.localeCompare () dukungan dasar bersifat universal!
sumber
Sesuatu seperti ini:
sumber
'a'>'A' //true
'z'>'a' //true
'A'>'z' //false
'Zebra'
lebih tinggi daripada string'apple'
, yang akan dilakukan jika Anda tidak menggunakan.toLowerCase()
.'Z' < 'a' // true
dan'z' < 'a' // false
Jika string dibandingkan berisi karakter unicode Anda dapat menggunakan
localeCompare
fungsi dariString
kelas seperti berikut ini:sumber
users.sort((a, b) => a.name.localeCompare(b.name))
ES6 satu liner kecil yang bagus:
sumber
Kita dapat menggunakan localeCompare tetapi perlu memeriksa kunci juga untuk nilai falsey
Kode di bawah ini tidak akan berfungsi jika satu entri memiliki nama yang hilang.
Jadi kita perlu memeriksa nilai falsey seperti di bawah ini
ATAU
kita bisa menggunakan lodash, ini sangat sederhana. Ini akan mendeteksi nilai-nilai yang dikembalikan yaitu apakah angka atau string dan melakukan pengurutan yang sesuai.
https://lodash.com/docs/4.17.5#ortBy
sumber
underscorejs menawarkan fungsi _.sortBy yang sangat bagus:
atau Anda dapat menggunakan fungsi pengurutan khusus:
sumber
sortBy
mendeteksi nilai yang dikembalikan adalah string dan dengan demikian melakukan pengurutan alfabet? Terima kasihJika kita menyortir nama atau sesuatu dengan karakter khusus, seperti ñ atau áéíóú (commons dalam bahasa Spanyol) kita dapat menggunakan params locales ( es untuk bahasa Spanyol dalam kasus ini) dan opsi seperti ini:
Pilihan lokasi resmi dapat ditemukan di sini di iana , es (spanyol), de (Jerman), fr (Prancis). Tentang basis sensitivitas berarti:
sumber
Pada dasarnya Anda dapat mengurutkan array dengan metode sortir, tetapi jika Anda ingin mengurutkan objek maka Anda harus melewati fungsi untuk mengurutkan metode array, jadi saya akan memberi Anda contoh menggunakan array Anda
sumber
else
harus dihapus? Kalau tidak, itureturn 0
tidak akan pernah dibacaTerinspirasi dari jawaban ini ,
sumber
Notasi yang lebih ringkas:
sumber
sign(f(a, b)) =-sign(f(b, a))
(untuk a = b)a.firstname == b.firstname
harus digunakan===
untuk kelengkapanjuga untuk penguraian asec dan desc, Anda dapat menggunakan ini: misalkan kita memiliki SortType variabel yang menentukan pengurutan atau pengurutan yang Anda inginkan:
sumber
Fungsi umum dapat ditulis seperti di bawah ini
Anda dapat melewati parameter di bawah ini
sumber
mencoba
Tampilkan cuplikan kode
sumber
[9,8,7,6,5,1,2,3].sort((a,b) => a<b ? -1 : 1)
Anda dapat menggunakan ini untuk objek
sumber
hanya dengan kata-kata Anda dapat menggunakan metode ini
sumber
Anda dapat menggunakan metode larik bawaan -
sort
. Metode ini menggunakan metode panggilan balik sebagai paramPoin-Poin Penting yang perlu diperhatikan untuk memahami kode ini.
myCustomSort
harus mengembalikan +1 atau -1 untuk setiap pasangan elemen (dari array input) perbandingan.toLowerCase()
/toUpperCase()
dalam metode panggilan balik penyortiran khusus sehingga perbedaan huruf besar / kecil tidak mempengaruhi kebenaran proses penyortiran.Saya harap penjelasan ini cukup jelas. Jangan ragu untuk berkomentar jika menurut Anda, diperlukan lebih banyak info.
Bersulang!
sumber
Dorong jawaban teratas menjadi prototipe untuk disortir berdasarkan kunci.
sumber
Anda dapat menggunakan sesuatu yang serupa, untuk menghilangkan case sensitif
sumber
Implementasi saya, berfungsi baik di versi ES yang lebih lama:
sumber
Sekadar catatan, jika Anda ingin memiliki fungsi sortir bernama, sintaksnya adalah sebagai berikut:
Perhatikan bahwa berikut ini TIDAK berfungsi:
sumber