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

จัดการออบเจ็กต์เพื่อจัดกลุ่มตามรายการอาร์เรย์ออบเจ็กต์ใน JavaScript

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

const arr = [
  {
    "group":[],
    "name": "All Makes",
    "code": ""
  },
  {
    "group":["Group A"],
    "name": "BMW",
    "code": "X821"
  },
  {
    "group":["Group B"],
    "name": "Audi",
    "code": "B216"
  },
  {
    "group":["Group B"],
    "name": "Ford",
    "code": "P385"
  },
  {
    "group":["Group B", "Group C"],
    "name": "Mercedes",
    "code": "H801"
  },
  {
    "group":["Group C"],
    "name": "Honda",
    "code": "C213"
  }
];

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของออบเจ็กต์ดังกล่าว ฟังก์ชันควรจัดกลุ่มออบเจ็กต์ของอาร์เรย์นี้ตามคุณสมบัติ group ของแต่ละออบเจ็กต์ ถ้าคุณสมบัติ group มีมากกว่าหนึ่งองค์ประกอบ ออบเจ็กต์นั้นควรปรากฏในทั้งสองกลุ่ม

ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้:

const output = [
  {
    "group": "Group A",
    "cars": [
      {
        name: "BMW",
        code: "X821"
      }
    ]
  },
  {
    "group": "Group B",
    "cars": [
      { name: "Audi", code: "B216" },
      { name: "Ford", code: "P385" },
      { name: "Mercedes", code: "H801" }
    ]
  },
  {
    "group": "Group C",
    "cars": [
      { name: "Mercedes", code: "H801" },
      { name: "Honda", code: "C213" }
    ]
  }
];

ตัวอย่าง

โค้ดสำหรับนี้จะเป็นดังนี้:

const arr = [
  {
    "group":[],
    "name": "All Makes",
    "code": ""
  },
  {
    "group":["Group A"],
    "name": "BMW",
    "code": "X821"
  },
  {
    "group":["Group B"],
    "name": "Audi",
    "code": "B216"
  },
  {
    "group":["Group B"],
    "name": "Ford",
    "code": "P385"
  },
  {
    "group":["Group B", "Group C"],
    "name": "Mercedes",
    "code": "H801"
  },
  {
    "group":["Group C"],
    "name": "Honda",
    "code": "C213"
  }
];

const groupTogether = (arr = []) => {
  let res = []
  res = Object.entries(arr.reduce((acc, { group, ...r }) => {
    group.forEach(key => acc[key] = (acc[key] || []).concat({...r}));
    return acc;
  }, {}))
  return res.map(([group, arr]) => ({ group, arr }));
};

console.log(JSON.stringify(groupTogether(arr), undefined, 4));

ผลลัพธ์

ผลลัพธ์ในคอนโซลจะเป็นดังนี้:

[
  {
    "group": "Group A",
    "arr": [
      {
        "name": "BMW",
        "code": "X821"
      }
    ]
  },
  {
    "group": "Group B",
    "arr": [
      { "name": "Audi", "code": "B216" },
      { "name": "Ford", "code": "P385" },
      { "name": "Mercedes", "code": "H801" }
    ]
  },
  {
    "group": "Group C",
    "arr": [
      { "name": "Mercedes", "code": "H801" },
      { "name": "Honda", "code": "C213" }
    ]
  }
]