Слияние двух объектов с сохранением соответствующих ключей - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь объединить два javascript объекта, которые имеют одинаковый ключ, но разные значения. Я хочу, чтобы они сохранили разные ключи и поместили их вместе в соответствующий родительский объект.

Например:

const obj1 = {
   "title" : {
     "en-US" : "Some title"
   },
   "text": {
     "en-US": "Some text"
   }
 }
 const obj2 = {
   "title" : {
     "de-DE" : "Some diffrent title"
   },
   "text": {
     "de-DE": "Some diffrent text"
   }
 }

Желаемый результат:

{
    "title" : {
      "en-US" : "Some title",
      "de-DE" : "Some diffrent title"
    },
    "text": {
      "en-US": "Some text"
      "de-DE": "Some diffrent text"
    }
  }

Что Я попытался:

Object.assign и вариант ES6 дал мне это:

const mergedObj = {...obj1, ...obj2}

console.log (mergedObj);

    {
        "title" : {
          "de-DE" : "Some diffrent title"
        },
        "text": {
          "de-DE": "Some diffrent text"
        }
      }

Ответы [ 2 ]

4 голосов
/ 14 января 2020

Вы можете получить ключи одного из ваших объектов и сопоставить его с новым объектом, который объединяет значения для этого ключа из обоих объектов в один. Затем вы можете использовать Object.assign() для объединения вашего массива сопоставленных объектов в один результирующий объект, например, так:

const obj1 = { "title" : { "en-US" : "Some title" }, "text": { "en-US": "Some text" } } 
const obj2 = { "title" : { "de-DE" : "Some diffrent title" }, "text": { "de-DE": "Some diffrent text" } }

const merge_objs = (o1, o2) =>
  Object.assign({}, ...Object.keys(o1).map(k => ({[k]: {...o1[k], ...o2[k]}})));
 
console.log(merge_objs(obj1, obj2));
1 голос
/ 14 января 2020

вы можете сделать это так:

const obj1 = {
   "title" : {
     "en-US" : "Some title"
   },
   "text": {
     "en-US": "Some text"
   }
 }
 const obj2 = {
   "title" : {
     "de-DE" : "Some diffrent title"
   },
   "text": {
     "de-DE": "Some diffrent text"
   }
 }

    function mergeObject(obj1,obj2){
       let c={};
       Object.keys(obj1).map((k)=>{
           let v={...obj1[k],...obj2[k]};
            c[k]=v;
        })
        return c;
      }

console.log(mergeObject(obj1,obj2));
...