ภาพรวม
สมมติว่าเรามีอาร์เรย์ของอ็อบเจ็กต์ข้อมูลรถยนต์:
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' } ]
}