Search code examples
javascriptobjectjavascript-objectsconcatenation

Combine two Javascript Objects into one Object with same keys


I need help combining two objects with same keys into one object. I am getting these objects from an api request.

My first object:

var obj1 = {
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "",
RefinableString21: "",
RefinableString22: "",
RefinableString23: "",
RefinableString24: "",
RefinableString25: ""
}

My second object:

var obj2 = {
RefinableString15: "",
RefinableString16: "",
RefinableString17: "",
RefinableString19: "",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}

I want it to look like this in the end:

{
RefinableString15: "Claims",
RefinableString16: "2123",
RefinableString17: "New York Cyberstate",
RefinableString19: "Global Property",
RefinableString20: "Test",
RefinableString21: "Red",
RefinableString22: "Test",
RefinableString23: "Red",
RefinableString24: "Test",
RefinableString25: "Green"
}

I have tried Object.assign, but it didn't work for my problem.


Solution

  • var obj1 = {
      RefinableString15: "Claims",
      RefinableString16: "2123",
      RefinableString17: "New York Cyberstate",
      RefinableString19: "Global Property",
      RefinableString20: "",
      RefinableString21: "",
      RefinableString22: "",
      RefinableString23: "",
      RefinableString24: "",
      RefinableString25: ""
    }
    
    var obj2 = {
      RefinableString15: "",
      RefinableString16: "",
      RefinableString17: "",
      RefinableString19: "",
      RefinableString20: "Test",
      RefinableString21: "Red",
      RefinableString22: "Test",
      RefinableString23: "Red",
      RefinableString24: "Test",
      RefinableString25: "Green"
    }
    
    function merge(object1, object2) {
      const keys = Object.keys(object1);
      return keys.reduce((result, item) => {
        result[item] = object1[item] || object2[item];
        return result;
      }, {})
    }
    
    console.log(merge(obj1, obj2))