Fungsi berikut akan memungkinkan Anda untuk mengurutkan array objek pada satu atau beberapa properti, baik naik (default) atau turun di setiap properti, dan memungkinkan Anda untuk memilih apakah akan melakukan perbandingan case sensitif atau tidak. Secara default, fungsi ini melakukan jenis huruf besar-kecil.
Argumen pertama harus berupa array yang berisi objek. Argumen selanjutnya harus berupa daftar string yang dipisah koma yang mereferensikan properti objek yang berbeda untuk disortir. Argumen terakhir (yang opsional) adalah boolean untuk memilih apakah akan melakukan jenis huruf sensitif atau tidak - gunakan true
untuk jenis huruf sensitif.
Fungsi akan mengurutkan setiap properti / kunci dalam urutan naik secara default. Jika Anda ingin kunci tertentu untuk semacam dalam urutan, maka sebagai gantinya lulus dalam sebuah array dalam format ini: ['property_name', true]
.
Berikut adalah beberapa contoh penggunaan fungsi yang diikuti oleh penjelasan (di mana homes
array berisi objek):
objSort(homes, 'city')
-> urutkan berdasarkan kota (ascending, case in-sensitive)
objSort(homes, ['city', true])
-> urutkan berdasarkan kota (turun, case-in sensitif)
objSort(homes, 'city', true)
-> urutkan berdasarkan kota kemudian harga (naik, peka huruf besar kecil )
objSort(homes, 'city', 'price')
-> urutkan berdasarkan kota kemudian harga (keduanya naik, tidak sensitif huruf)
objSort(homes, 'city', ['price', true])
-> urutkan berdasarkan kota (menanjak) lalu harga (turun), tidak sensitif kasus)
Dan tanpa basa-basi lagi, inilah fungsinya:
function objSort() {
var args = arguments,
array = args[0],
case_sensitive, keys_length, key, desc, a, b, i;
if (typeof arguments[arguments.length - 1] === 'boolean') {
case_sensitive = arguments[arguments.length - 1];
keys_length = arguments.length - 1;
} else {
case_sensitive = false;
keys_length = arguments.length;
}
return array.sort(function (obj1, obj2) {
for (i = 1; i < keys_length; i++) {
key = args[i];
if (typeof key !== 'string') {
desc = key[1];
key = key[0];
a = obj1[args[i][0]];
b = obj2[args[i][0]];
} else {
desc = false;
a = obj1[args[i]];
b = obj2[args[i]];
}
if (case_sensitive === false && typeof a === 'string') {
a = a.toLowerCase();
b = b.toLowerCase();
}
if (! desc) {
if (a < b) return -1;
if (a > b) return 1;
} else {
if (a > b) return -1;
if (a < b) return 1;
}
}
return 0;
});
} //end of objSort() function
Dan inilah beberapa contoh data:
var homes = [{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": 162500
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": 1000000
}, {
"h_id": "5",
"city": "new york",
"state": "NY",
"zip": "00010",
"price": 1000000
}, {
"h_id": "6",
"city": "Dallas",
"state": "TX",
"zip": "85000",
"price": 300000
}, {
"h_id": "7",
"city": "New York",
"state": "NY",
"zip": "00020",
"price": 345000
}];