Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

วิธีผสานสองอ็อบเจ็กต์อาร์เรย์ที่มีขนาดต่างกันโดยใช้คีย์ใน JavaScript


สมมติว่าเรามีวัตถุเช่นนี้ −

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}]
};

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับวัตถุดังกล่าว ฟังก์ชันควรผสาน part1 และ part2 ของวัตถุเพื่อสร้างอาร์เรย์ของวัตถุเช่นนี้ -

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

ตัวอย่าง

รหัสสำหรับสิ่งนี้จะเป็น −

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

ผลลัพธ์

และผลลัพธ์ในคอนโซลจะเป็น −

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