Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

วิธีเรียงลำดับอาร์เรย์ของออบเจ็กต์ตามความยาวของอาร์เรย์ซ้อนใน JavaScript

สมมติว่ามีอาร์เรย์ของออบเจ็กต์ที่มีอาร์เรย์ซ้อนของออบเจ็กต์ดังนี้:

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"
      }
    ]
  }
]