Katakanlah Anda memiliki kelas JavaScript seperti ini
var DepartmentFactory = function(data) {
this.id = data.Id;
this.name = data.DepartmentName;
this.active = data.Active;
}
Katakanlah Anda kemudian membuat sejumlah instance dari kelas itu dan menyimpannya dalam sebuah array
var objArray = [];
objArray.push(DepartmentFactory({Id: 1, DepartmentName: 'Marketing', Active: true}));
objArray.push(DepartmentFactory({Id: 2, DepartmentName: 'Sales', Active: true}));
objArray.push(DepartmentFactory({Id: 3, DepartmentName: 'Development', Active: true}));
objArray.push(DepartmentFactory({Id: 4, DepartmentName: 'Accounting', Active: true}));
Jadi saya sekarang akan memiliki array objek yang dibuat oleh DepartmentFactory
. Bagaimana saya menggunakan array.sort()
metode untuk mengurutkan array objek ini dengan DepartmentName
properti masing-masing objek?
The array.sort()
Metode bekerja dengan baik ketika menyortir array dari string
var myarray=["Bob", "Bully", "Amy"];
myarray.sort(); //Array now becomes ["Amy", "Bob", "Bully"]
Tetapi bagaimana cara membuatnya bekerja dengan daftar objek?
javascript
jdavis
sumber
sumber
DepartmentFactory
sebagai konstruktor, buat objeknya menggunakannew DepartmentFactory
, jika tidak array akan diisi dengan banyakundefined
nilai.Jawaban:
Anda harus melakukan sesuatu seperti ini:
Catatan: mengubah kasing (ke atas atau bawah) memastikan jenis case tidak sensitif.
sumber
return (textA < textB) ? -1 : (textA > textB) ? 1 : 0;
Tidak akan mengedit jawaban Anda, mengulurkan harapan saya setidaknya akan mengingat halUntuk mendukung unicode:
sumber
return a.DepartmentName.toLowerCase().localeCompare(b.DepartmentName.toLowerCase());
localeCompare
keren dan memiliki semua dukungan browser untuk arg pertama. Tidak buruk!localeCompare
adalah melangsir pekerjaan mengelola logika semacam dan kebiasaan lokal ke sistem. Jika melakukan jenis huruf tidak sensitif adalah normal untuk lokal, seperti dalam bahasa Inggris, ini akan dilakukan untuk Anda:"Z" > 'a' // false
"Z".localeCompare('a') // 1
Jika Anda ingin menyimpang dari default lokal, Anda dapat mengirim serta menimpa dilocales
danoptions
parameter: developer.mozilla. org / id-AS / docs / Web / JavaScript / Referensi / ...demo: http://jsfiddle.net/diode/hdgeH/
sumber
sumber
DEMO
sumber
Ini mengurutkan mereka menurut abjad DAN tidak sensitif huruf. Ini juga sangat bersih dan mudah dibaca: D
sumber
'sensitivity': 'base'
, yang membuat perbedaan besar tergantung pada aplikasi Anda menurut MDN .sumber
lakukan seperti ini
sumber
Berikut adalah fungsi sederhana yang dapat Anda gunakan untuk mengurutkan array objek melalui propertinya; tidak masalah jika properti adalah tipe string atau integer, itu akan berfungsi.
sumber
Anda harus melewati fungsi yang menerima dua parameter, membandingkannya, dan mengembalikan angka, jadi anggap Anda ingin mengurutkannya berdasarkan ID yang akan Anda tulis ...
sumber
Setelah mencoba sedikit tentang ini, dan mencoba membuat loop lebih sedikit mungkin, saya berakhir dengan solusi ini:
Demo di codepen
sumber
Jawaban sederhana:
Cara ES6:
Jika Anda perlu membuatnya menjadi huruf kecil / besar dll, lakukan saja dan simpan yang menghasilkan variabel daripada membandingkan variabel itu. Contoh:
sumber