KimCindy
KimCindy

Reputation: 1209

How to copy/overwrite an object using Object.assign() function?

How to fully copy / overwrite an object using Object.assign()? If there would be another approach, it would be highly appreciated. :) The purpose is to update the existing object to its new value.

Below is my code snippet and the expected result should be the same as the value of object2 only.

Expected result: { a: 8, b: 7 }

const object1 = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
};

const object2 = {
  a: 8,
  b: 7
};

Object.assign(object1, object2);

console.log(object1);

Upvotes: 2

Views: 1142

Answers (2)

Nina Scholz
Nina Scholz

Reputation: 386654

For keeping the same object reference, you could remove all properties in advance and then assign the wanted properties with Object.assign.

const object1 = { a: 1, b: 2, c: { d: 3 } };
const object2 = { a: 8, b: 7 };

Object.assign(
    Object.keys(object1).reduce((o, k) => (Reflect.deleteProperty(o, k), o), object1),
    object2
);

console.log(object1);

IE

var object1 = { a: 1, b: 2, c: { d: 3 } },
    object2 = { a: 8, b: 7 };

Object.keys(object2).reduce(
    function (object, key) {
        object[key] = object2[key];
        return object;
    }, 
    Object.keys(object1).reduce(function (object, key) {
        delete object[key];
        return object;
    }, object1)
);

console.log(object1);

Upvotes: 4

cнŝdk
cнŝdk

Reputation: 32145

If you want to override the object1 properties with those from object2, you need to do it like this:

object1 = Object.assign({}, object2);

But with this you need to declare object1 with var keyword so you can assign a new value to it.

Demo:

var object1 = {
  a: 1,
  b: 2,
  c: {
    d: 3
  }
};

const object2 = {
  a: 8,
  b: 7
};

object1 = Object.assign({}, object2);

console.log(object1);

Upvotes: 0

Related Questions