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

Cách hợp nhất hai mảng đối tượng có kích thước khác nhau bằng khóa trong JavaScript

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

const obj = {
   "part1": [{"id": 1, "a": 50},{"id": 2, "a": 55},{"id": 4, "a": 100}],
   "part2":[{"id": 1, "b": 40}, {"id": 3, "b": 45}, {"id": 4, "b": 110}]
};

Chúng tôi được yêu cầu viết một hàm JavaScript có một đối tượng như vậy. Hàm nên hợp nhất part1 và part2 của đối tượng để tạo thành một mảng đối tượng như thế này -

const output = [
   {"id": 1, "a": 50, "b": 40},
   {"id": 2, "a": 55},
   {"id": 3, "b": 45},
   {"id": 4, "a": 100, "b": 110}
];

Ví dụ

Mã cho điều này sẽ là -

const obj = {
   "part1": [{"id": 1, "a": 50},{"id": 2, "a": 55},{"id": 4, "a": 100}],
   "part2":[{"id": 1, "b": 40}, {"id": 3, "b": 45}, {"id": 4, "b": 110}]
};
const mergeObject = (obj = {}) => {
   let result = [];
   result = Object.keys(obj).reduce(function (hash) {
      return function (r, k) {
         obj[k].forEach(function (o) {
            if (!hash[o.id]) {
               hash[o.id] = {};
               r.push(hash[o.id]);
            }
            Object.keys(o).forEach(function (l) {
               hash[o.id][l] = o[l];
            });
         });
         return r;
      };
   }(Object.create(null)), []).sort((a, b) => {
      return a['id'] − b['id'];
   });
   return result;
};
console.log(mergeObject(obj));

Đầu ra

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

[
   { id: 1, a: 50, b: 40 },
   { id: 2, a: 55 },
   { id: 3, b: 45 },
   { id: 4, a: 100, b: 110 }
]