Giả sử chúng ta có một mảng đối tượng chứa dữ liệu về một số sinh viên như sau:
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 }
}];
Chúng ta cần viết một hàm JavaScript nhận một mảng như vậy.
Hàm sẽ chuẩn bị một đối tượng các thuộc tính, một thuộc tính cho mỗi khóa mà các đối tượng hiện có.
Do đó, với mảng trên, đầu ra sẽ trông như:
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
}]
};
Ví dụ
Mã thực hiện:
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 = 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));
Kết quả
Kết quả trong console:
{
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 }
]
}