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

Tổng giá trị các khóa trùng lặp trong mảng đối tượng - JavaScript


Giả sử chúng ta có một mảng các đối tượng như sau:

const arr = [ 
  {'ID-01':1}, 
  {'ID-02':3}, 
  {'ID-01':3}, 
  {'ID-02':5} 
];

Chúng ta cần cộng dồn giá trị của tất cả các đối tượng có khóa trùng nhau.

Do đó, với mảng này, kết quả đầu ra nên là:

const output = [{'ID-01':4}, {'ID-02':8}];

Chúng ta sẽ lặp qua mảng, kiểm tra đối tượng đã tồn tại với cùng khóa, nếu có thì cộng giá trị, nếu không thì push đối tượng mới vào mảng kết quả.

Ví dụ

Dưới đây là đoạn code:

const arr = [ 
  {'ID-01':1}, 
  {'ID-02':3}, 
  {'ID-01':3}, 
  {'ID-02':5} 
]; 
const indexOf = function(key){ 
  return this.findIndex(el => typeof el[key] === 'number') 
}; 
Array.prototype.indexOf = indexOf; 
const groupArray = arr => { 
  const res = []; 
  for(let i = 0; i < arr.length; i++){ 
    const key = Object.keys(arr[i])[0]; 
    const ind = res.indexOf(key); 
    if(ind !== -1){ 
      res[ind][key] += arr[i][key]; 
    }else{ 
      res.push(arr[i]); 
    }; 
  }; 
  return res; 
}; 
console.log(groupArray(arr));

Kết quả

Đoạn code sẽ in ra console:

[ { 'ID-01': 4 }, { 'ID-02': 8 } ]