สมมติว่าเรามีอาร์เรย์ของวัตถุที่มีข้อมูลเกี่ยวกับนักเรียนบางคนเช่นนี้ -
const arr = [{
name: 'A',
idNo: 1,
marks: {
math: 98,
sci: 97,
eng: 89
}
},
{
name: 'B',
idNo: 2,
marks: {
math: 88,
sci: 87,
eng: 79
}
},
{
name: 'C',
idNo: 3,
marks: {
math: 87,
sci: 98,
eng: 91
}
}]; เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ดังกล่าว
ฟังก์ชันของเราควรเตรียมอ็อบเจ็กต์ของคุณสมบัติ หนึ่งคุณสมบัติสำหรับแต่ละ id อ็อบเจ็กต์ที่อ็อบเจ็กต์มีอยู่ในปัจจุบัน
ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรมีลักษณะดังนี้ −
const output = {
name: [A, B, C],
idNo: [1, 2, 3],
marks: [{
math: 98,
sci: 97,
eng: 89
},
{
math: 88,
sci: 87,
eng: 79
},
{
math: 87,
sci: 98,
eng: 91
}]
}; ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [{
name: 'A',
idNo: 1,
marks: {
math: 98,
sci: 97,
eng: 89
}
},
{
name: 'B',
idNo: 2,
marks: {
math: 88,
sci: 87,
eng: 79
}
},
{
name: 'C',
idNo: 3,
marks: {
math: 87,
sci: 98,
eng: 91
}
}];
const combineMarks = (arr = []) => {
let res = [];
res = arr.reduce((acc, val) => {
Object.keys(val).forEach(el => {
if (!acc[el]) {
acc[el] = [];
};
acc[el].push(val[el])
});
return acc;
}, {});
return res;
};
console.log(combineMarks(arr)); ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
{
name: [ 'A', 'B', 'C' ],
idNo: [ 1, 2, 3 ],
marks: [
{ math: 98, sci: 97, eng: 89 },
{ math: 88, sci: 87, eng: 79 },
{ math: 87, sci: 98, eng: 91 }
]
}