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

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

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

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 ta cần viết hàm JavaScript nhận vào đối tượng này. Hàm hợp nhất part1 và part2 thành mảng đối tượng như sau:

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ã thực hiện:

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

Kết quả

Kết quả in ra console:

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