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

Hợp nhất đối tượng &tổng hợp một thuộc tính duy nhất trong JavaScript

Giả sử, chúng ta có hai mảng đối tượng chứa thông tin về một số sản phẩm của một công ty -

const first = [
   {
      id: "57e7a1cd6a3f3669dc03db58",
      quantity:3
   },
   {
      id: "57e77b06e0566d496b51fed5",
      quantity:3
   },
   {
      id: "57e7a1cd6a3f3669dc03db58",
      quantity:3
   },
   {
      id: "57e77b06e0566d496b51fed5",
      quantity:3
   }
];
const second = [
   {
      id: "57e7a1cd6a3f3669dc03db58",
      quantity:6
   },
   {
      id: "57e77b06e0566d496b51fed5",
      quantity:6
   }
];

Bây giờ chúng ta được yêu cầu viết một hàm hợp nhất hai mảng, sao cho các đối tượng có id cùng tên không xuất hiện lặp lại và hơn nữa, thuộc tính số lượng cho id trùng lặp đối tượng được thêm vào với nhau.

Do đó, hãy viết mã cho chức năng này -

Ví dụ

const first = [
   {
      id: "57e7a1cd6a3f3669dc03db58",
      quantity:3
   },
   {
      id: "57e77b06e0566d496b51fed5",
      quantity:3
   },
   {
      id: "57e7a1cd6a3f3669dc03db58",
      quantity:3
   },
   {
      id: "57e77b06e0566d496b51fed5",
      quantity:3
   }
];
const second = [
   {
      id: "57e7a1cd6a3f3669dc03db58",
      quantity:6
   },
   {
      id: "57e77b06e0566d496b51fed5",
      quantity:6
   }
];
const mergeArray = (first, second) => {
   return [...first, ...second].reduce((acc, val, i, arr) => {
      const { id, quantity } = val;
      const ind = acc.findIndex(el => el.id === id);
      if(ind !== -1){
         acc[ind].quantity += quantity;
      }else{
         acc.push({
            id,
            quantity
         });
      }
      return acc;
   }, []);
}
console.log(mergeArray(first, second));

Đầu ra

Đầu ra trong bảng điều khiển sẽ là -

[
   { id: '57e7a1cd6a3f3669dc03db58', quantity: 12 },
   { id: '57e77b06e0566d496b51fed5', quantity: 12 }
]