Hàm sau sẽ cho phép bạn sắp xếp một mảng các đối tượng trên một hoặc nhiều thuộc tính, tăng dần (mặc định) hoặc giảm dần trên mỗi thuộc tính và cho phép bạn chọn có thực hiện so sánh trường hợp nhạy cảm hay không. Theo mặc định, chức năng này thực hiện các loại không phân biệt chữ hoa chữ thường.
Đối số đầu tiên phải là mảng chứa các đối tượng. (Các) đối số tiếp theo phải là một danh sách các chuỗi được phân tách bằng dấu phẩy tham chiếu các thuộc tính đối tượng khác nhau để sắp xếp theo. Đối số cuối cùng (là tùy chọn) là một boolean để chọn có hay không thực hiện các loại phân biệt chữ hoa chữ thường - sử dụng true
cho các loại phân biệt chữ hoa chữ thường.
Hàm sẽ sắp xếp từng thuộc tính / khóa theo thứ tự tăng dần theo mặc định. Nếu bạn muốn một khóa cụ thể sắp xếp theo thứ tự giảm dần, thì thay vào đó hãy chuyển vào một mảng ở định dạng này : ['property_name', true]
.
Dưới đây là một số cách sử dụng mẫu của hàm theo sau là một lời giải thích (trong đó homes
một mảng chứa các đối tượng):
objSort(homes, 'city')
-> sắp xếp theo thành phố (tăng dần, trường hợp nhạy cảm)
objSort(homes, ['city', true])
-> sắp xếp theo thành phố (giảm dần, trường hợp nhạy cảm)
objSort(homes, 'city', true)
-> sắp xếp theo thành phố sau đó giá (tăng dần, trường hợp nhạy cảm )
objSort(homes, 'city', 'price')
-> sắp xếp theo thành phố sau đó giá (cả tăng dần, trường hợp nhạy cảm)
objSort(homes, 'city', ['price', true])
-> sắp xếp theo thành phố (tăng dần) sau đó giá (giảm dần), trường hợp nhạy cảm)
Và không cần phải quảng cáo thêm, đây là chức năng:
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
Và đây là một số dữ liệu mẫu:
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
}];