Changing merged object values by changing individual object values

Viewed 30

I have two simple objects. After merging these two objects, I would like to change the merged object's values by changing individual objects' values. Is it possible? If so, How can I do that?

For example:

const objA = {first: 'foo'};
const objB = {second: 'bar'};
const merged = {...objA, ...objB}; // {first: 'foo', second: 'bar'}

objA.first = 'something';
// what I need merged: {first: 'something', second: 'bar'}
1 Answers

Strings are not pointers but objects(and arrays) are

//const objA = {first: 'foo'};
//const objB = {second: 'bar'};
//const mergeFail = {...objA, ...objB};
const objA = {first: ['foo']};
const objB = {second: ['bar']};
const merged = {...objA, ...objB};
objA.first[0]='something';
console.log(merged.first[0]); //Object.keys(thisArr) returns keys



//however u can fill an object full of getters as well

//before we get into getters.. simple demonstration
let c=0
let obj={}
let options={get: function(){return c++} }
Object.defineProperty(obj,"c",options)
for(let i=0;i<3;i++){console.log(obj.c)}

//getter example begin
const objC = {first: 'foo'};
const objD = {second: 'bar'};
function merge(...objects){
  var returnObj={}
  objects.forEach(obj=>{
    Object.keys(obj).forEach(key=>{
      if(!returnObj[key]){
        const opts={get:function(){return obj[key]}}
        Object.defineProperty(returnObj,key,opts)
      }
    })
  })
  return returnObj
}
const merged1=merge(objC,objD);
objC.first='something';
console.log(merged1.first); //only Object.getOwnPropertyNames(thisArr) returns keys

Related