Computer >> Máy Tính >  >> Lập trình >> Javascript

Tính tổng các giá trị số tương tự trong mảng đối tượng - JavaScript

Giả sử, chúng ta có một mảng các đối tượng như thế này -

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

Chúng tôi được yêu cầu viết một hàm JavaScript nhận trong một mảng như vậy và kết hợp thuộc tính giá trị của tất cả các đối tượng có giá trị tương tự cho thuộc tính firstName.

Do đó, đối với mảng trên, đầu ra sẽ giống như -

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

Đối với mỗi đối tượng, chúng tôi sẽ tìm một cách đệ quy các đối tượng tương tự của chúng

(Các đối tượng tương tự cho ngữ cảnh của câu hỏi này là những đối tượng có giá trị firstName tương tự).

Sau đó, chúng tôi sẽ thêm thuộc tính giá trị vào một đối tượng và xóa đối tượng khác khỏi mảng. Điều này sẽ được thực hiện cho đến khi chúng ta đến cuối mảng. Khi tiếp cận, chúng tôi sẽ giảm mảng của mình thành mảng mong muốn.

Ví dụ

Sau đây là mã -

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));

Đầu ra

Điều này sẽ tạo ra kết quả sau trong bảng điều khiển -

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