將 JavaScript 中的物件數組合並


假設我們有一個物件陣列,其中包含有關某些學生的資料,如下所示:

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

更新於:2020 年 11 月 23 日

277 次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始
廣告