สมมติว่ามีอาร์เรย์ของออบเจ็กต์ที่มีอาร์เรย์ซ้อนของออบเจ็กต์ดังนี้:
const arr = [
{ name: "Cat1", elements : [
{ name: name, id: id } ] },
{ name: "Cat2", elements : [
{ name: name, id: id },
{ name: name, id: id },
{ name: name, id: id } ] },
{ name: "Cat3", elements : [
{ name: name, id: id },
{ name: name, id: id } ]
} ];
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าว ฟังก์ชันควรเรียงลำดับอาร์เรย์ของออบเจ็กต์นี้
ออบเจ็กต์ที่มีจำนวนออบเจ็กต์ในคุณสมบัติ "elements" มากกว่าควรอยู่ด้านหน้า
ดังนั้น หลังจากเรียงแล้ว อาร์เรย์ควรเป็นดังนี้:
const output = [
{ name: "Cat2", elements : [
{ name: name, id: id },
{ name: name, id: id },
{ name: name, id: id } ]
},
{ name: "Cat3", elements : [
{ name: name, id: id },
{ name: name, id: id } ]
},
{ name: "Cat1", elements : [
{ name: name, id: id } ]
} ];
ตัวอย่าง
โค้ดสำหรับนี้จะเป็นดังนี้:
const arr = [
{ "name": "Cat1", elements : [
{ "name": "name", "id": "id" } ]
},
{ "name": "Cat2", elements : [
{ "name": "name", "id": "id" },
{ "name": "name", "id": "id" },
{ "name": "name", "id": "id" } ]
},
{ "name": "Cat3", elements : [
{ "name": "name", "id": "id" },
{ "name": "name", "id": "id" } ]
}
];
const sorter = (a, b) => {
if(a.elements.length > b.elements.length) {
return -1;
} else {
return 1;
}
}
arr.sort(sorter);
console.log(JSON.stringify(arr, undefined, 4));
ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็นดังนี้:
[
{
name": "Cat2",
"elements": [
{
"name": "name",
"id": "id"
},
{
"name": "name",
"id": "id"
},
{
"name": "name",
"id": "id"
}
]
},
{
"name": "Cat3",
"elements": [
{
"name": "name",
"id": "id"
},
{
"name": "name",
"id": "id"
}
]
},
{
"name": "Cat1",
"elements": [
{
"name": "name",
"id": "id"
}
]
}
]