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

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


ภาพรวม

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

const arr = [
  { 'make': 'audi', 'model': 'r8', 'year': '2012' },
  { 'make': 'audi', 'model': 'rs5', 'year': '2013' },
  { 'make': 'ford', 'model': 'mustang', 'year': '2012' },
  { 'make': 'ford', 'model': 'fusion', 'year': '2015' },
  { 'make': 'kia', 'model': 'optima', 'year': '2012' }
];

เราต้องเขียนฟังก์ชันที่จัดกลุ่มอ็อบเจ็กต์ตามคุณสมบัติ make

ผลลัพธ์ที่คาดหวัง

const output = {
  'audi': [
    { 'model': 'r8', 'year': '2012' },
    { 'model': 'rs5', 'year': '2013' }
  ],
  'ford': [
    { 'model': 'mustang', 'year': '2012' },
    { 'model': 'fusion', 'year': '2015' }
  ],
  'kia': [
    { 'model': 'optima', 'year': '2012' }
  ]
};

ตัวอย่างโค้ด

const arr = [
  { 'make': 'audi', 'model': 'r8', 'year': '2012' },
  { 'make': 'audi', 'model': 'rs5', 'year': '2013' },
  { 'make': 'ford', 'model': 'mustang', 'year': '2012' },
  { 'make': 'ford', 'model': 'fusion', 'year': '2015' },
  { 'make': 'kia', 'model': 'optima', 'year': '2012' }
];

const groupByMake = (arr = []) => {
  let result = [];
  result = arr.reduce((r, a) => {
    r[a.make] = r[a.make] || [];
    r[a.make].push(a);
    return r;
  }, Object.create(null));
  return result;
};

console.log(groupByMake(arr));

ผลลัพธ์ในคอนโซล

{
  audi: [
    { make: 'audi', model: 'r8', year: '2012' },
    { make: 'audi', model: 'rs5', year: '2013' }
  ],
  ford: [
    { make: 'ford', model: 'mustang', year: '2012' },
    { make: 'ford', model: 'fusion', year: '2015' }
  ],
  kia: [ { make: 'kia', model: 'optima', year: '2012' } ]
}