ฟังก์ชั่นต่อไปนี้จะช่วยให้คุณสามารถเรียงลำดับอาร์เรย์ของออบเจกต์ในคุณสมบัติหนึ่งหรือหลายอย่างทั้งจากน้อยไปมาก (เริ่มต้น) หรือจากมากไปน้อยในแต่ละคุณสมบัติและช่วยให้คุณเลือกว่าจะทำการเปรียบเทียบ โดยค่าเริ่มต้นฟังก์ชั่นนี้จะทำการเรียงตามตัวพิมพ์เล็กและใหญ่
อาร์กิวเมนต์แรกต้องเป็นอาร์เรย์ที่มีวัตถุ อาร์กิวเมนต์ที่ตามมาจะต้องเป็นรายการของสตริงที่คั่นด้วยเครื่องหมายจุลภาคซึ่งอ้างอิงคุณสมบัติของวัตถุที่แตกต่างเพื่อเรียงลำดับ อาร์กิวเมนต์สุดท้าย (ซึ่งเป็นทางเลือก) คือบูลีนเพื่อเลือกว่าจะดำเนินการตามตัวพิมพ์เล็กหรือใหญ่ - หรือไม่true
ตามขนาดตัวพิมพ์เล็กหรือใหญ่
ฟังก์ชันจะเรียงลำดับคุณสมบัติ / คีย์แต่ละรายการตามลำดับจากน้อยไปหามากตามค่าเริ่มต้น หากคุณต้องการให้คีย์เฉพาะเรียงลำดับจากมากไปน้อยให้ส่งผ่านอาร์เรย์ในรูปแบบนี้แทน:['property_name', true]
ถ้าคุณต้องการที่สำคัญโดยเฉพาะอย่างยิ่งในการเรียงลำดับในลำดับถัดลงแล้วแทนที่จะผ่านในอาร์เรย์ในรูปแบบนี้:
นี่คือตัวอย่างการใช้งานฟังก์ชั่นตามด้วยคำอธิบาย (ที่ไหน) homes
เป็นอาร์เรย์ที่มีวัตถุ):
objSort(homes, 'city')
-> จัดเรียงตามเมือง (น้อยไปมาก, เล็ก - ใหญ่)
objSort(homes, ['city', true])
-> จัดเรียงตามเมือง (จากมากไปน้อย, เล็ก - ใหญ่)
objSort(homes, 'city', true)
-> จัดเรียงตามเมืองแล้วราคา (น้อยไปหามากกรณีที่มีความละเอียดอ่อน )
objSort(homes, 'city', 'price')
-> จัดเรียงตามเมืองตามราคาแล้ว (ทั้งจากน้อยไปมากและเล็ก)
objSort(homes, 'city', ['price', true])
-> จัดเรียงตามเมือง (จากน้อยไปมาก) จากนั้นราคา (มากไปหาน้อย), เล็ก - ใหญ่
และถ้าไม่มีความกังวลใจเพิ่มเติมนี่คือฟังก์ชั่น:
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
และนี่คือข้อมูลตัวอย่าง:
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
}];