Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Kết hợp mảng đối tượng trong JavaScript


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 }
  ]
}