JavaScript:比較陣列元素屬性,如果相同,則合併


假設我們有一個物件陣列,其中包含有關某些資料儲存裝置的資訊,如下所示:

const drives = [
   {size:"900GB", count:3},
   {size:"900GB", count:100},
   {size:"1200GB", count:5},
   {size:"900GB", count:1}
];

請注意大小相同的情況出現很多次。

我們需要編寫一個函式,該函式接受這樣的陣列,並將所有重複的大小合併到一個單一的陣列索引中,並顯然對計數求和。

示例

const drives = [
   {size:"900GB", count:3},
   {size:"900GB", count:100},
    {size:"1200GB", count:5},
   {size:"900GB", count:1}
];
const groupDrives = (arr = []) => {
   const map = drives.reduce((map, e) => {
      if (e.size in map) map[e.size].count += e.count
      else map[e.size] = e
         return map;
   }, {})
   const result = Object.keys(map).map(function (k) {
      return this[k]
   }, map);
   return result;
}
console.log(groupDrives(drives));

輸出

控制檯中將輸出以下內容:

[ { size: '900GB', count: 104 }, { size: '1200GB', count: 5 } ]

更新於: 2020-11-23

64 次瀏覽

開啟你的職業生涯

完成課程並獲得認證

開始使用
廣告