在物件陣列中對相似的數字值求和 - JavaScript


假設我們有一個這樣的物件陣列 −

const arr = [
   {"firstName":"John", "value": 89},
   {"firstName":"Peter", "value": 151},
   {"firstName":"Anna", "value": 200},
   {"firstName":"Peter", "value": 22},
   {"firstName":"Anna","value": 60}
];

我們需要編寫一個 JavaScript 函式,該函式接收其中一個數組,並將具有類似 firstName 屬性值的那些物件的值屬性合併起來。

因此,對於上述陣列,輸出應如下所示 −

const output = [
   {"firstName":"John", "value": 89},
   {"firstName":"Peter", "value": 173},
   {"firstName":"Anna", "value": 260}
];

對於每個物件,我們將遞迴地查詢具有類似特徵的物件

(在此問題上下文中類似的物件是指具有類似 firstName 值的物件)。

然後,我們將值屬性新增到一個物件,並從陣列中刪除另一個物件。這將持續到我們到達陣列末尾。到達後,我們將把陣列縮減為所需的陣列。

示例

以下是程式碼 −

const arr = [
   {"firstName":"John", "value": 89},
   {"firstName":"Peter", "value": 151},
   {"firstName":"Anna", "value": 200},
   {"firstName":"Peter", "value": 22},
   {"firstName":"Anna","value": 60}
];
const sumSimilar = arr => {
   const res = [];
   for(let i = 0; i < arr.length; i++){
      const ind = res.findIndex(el => el.firstName === arr[i].firstName);
      if(ind === -1){
         res.push(arr[i]);
      }else{
         res[ind].value += arr[i].value;
      };
   };
   return res;
};
console.log(sumSimilar(arr));

輸出

這將在控制檯中產生以下輸出 −

[
   { firstName: 'John', value: 89 },
   { firstName: 'Peter', value: 173 },
   { firstName: 'Anna', value: 260 }
]

更新於: 2020-9-18

742 瀏覽

開啟你的職業生涯

完成課程以獲得認證

開始
廣告