Saya menyadari ini telah ditanyakan beberapa waktu lalu, tetapi saya pikir saya akan menambahkan solusi saya.
Fungsi ini menghasilkan metode pengurutan secara dinamis. cukup berikan setiap nama properti turunan yang dapat diurutkan, diawali dengan +/- untuk menunjukkan urutan naik atau turun. Sangat dapat digunakan kembali, dan tidak perlu mengetahui apa pun tentang struktur data yang telah Anda susun. Bisa dibuat bukti bodoh - tapi sepertinya tidak perlu.
function getSortMethod(){
var _args = Array.prototype.slice.call(arguments);
return function(a, b){
for(var x in _args){
var ax = a[_args[x].substring(1)];
var bx = b[_args[x].substring(1)];
var cx;
ax = typeof ax == "string" ? ax.toLowerCase() : ax / 1;
bx = typeof bx == "string" ? bx.toLowerCase() : bx / 1;
if(_args[x].substring(0,1) == "-"){cx = ax; ax = bx; bx = cx;}
if(ax != bx){return ax < bx ? -1 : 1;}
}
}
}
contoh penggunaan:
items.sort (getSortMethod ('- price', '+ priority', '+ name'));
ini akan mengurutkan itemsdengan yang terendah priceterlebih dahulu, dengan ikatan menuju ke item dengan yang tertinggi priority. ikatan selanjutnya diputus oleh item tersebutname
dimana item adalah array seperti:
var items = [
{ name: "z - test item", price: "99.99", priority: 0, reviews: 309, rating: 2 },
{ name: "z - test item", price: "1.99", priority: 0, reviews: 11, rating: 0.5 },
{ name: "y - test item", price: "99.99", priority: 1, reviews: 99, rating: 1 },
{ name: "y - test item", price: "0", priority: 1, reviews: 394, rating: 3.5 },
{ name: "x - test item", price: "0", priority: 2, reviews: 249, rating: 0.5 } ...
];
demo langsung: http://gregtaff.com/misc/multi_field_sort/
EDIT: Memperbaiki masalah Chrome.