У меня есть 2 объекта, которые я хочу объединить

Object1 = {'1234':{name: 'One'},'4567': {name: 'two'}}
Object2 = {'1234':{id: 1234, location: 'paris'},'4567':{id: 4567, location: 'london'}}

Если идентификатор совпадает с ключом объекта, объедините его.

Я хочу такой результат:

Object3 = {'1234':{id: 1234, name: 'One', location: 'paris'},'4567':{id: 4567, name: 'two', location: 'london'}}

Если я попробую использовать оператор распространения или Object.assign, он перезапишет предыдущий объект.

-4
sebs_dev 8 Июн 2021 в 20:29

2 ответа

Лучший ответ

Скорее всего, вы захотите перебрать один из объектов и объединить каждое значение.

const Object1 = {'1234':{name: 'One'},'4567': {name: 'two'}};
const Object2 = {'1234':{id: 1234, location: 'paris'},'4567':{id: 4567, location: 'london'}};
const Object3 = {};

for (let key in Object1) {
    Object3[key] = {...Object2[key], ...Object1[key]}
}

console.log(Object3);

Кроме того, вы можете добавить несколько операторов if, чтобы проверить, существует ли ключ в обоих объектах.

-1
tomsidorov 8 Июн 2021 в 17:43

Вы можете перебирать каждый ключ в object1, используя Object.keys(), а затем сгенерировать новый объект для каждого ключа, используя array#reduce.

const object1 = {'1234':{name: 'One'},'4567': {name: 'two'}},
      object2 = {'1234':{id: 1234, location: 'paris'},'4567':{id: 4567, location: 'london'}},
      result = Object.keys(object1).reduce((r,k) => {
        r[k] = r[k] || {};
        r[k] = {...object1[k], ...object2[k]};
        return r;
      },{});
console.log(result);
-1
Hassan Imam 8 Июн 2021 в 18:00