0

I have got an object of defaults, then some values which will over-ride the defaults. However when i use Object.assign to create a new object, and update this, the defaults also get changed.

let defaults = { test: 'hello world' };
let values = { test: 'beep' };
let merged = Object.assign(defaults, values);

merged.test = 'updated'

// defaults: { test: 'updated' }

Defaults should remain the same and only merged should get updated. I was under the impression that Object.assign copies the object, not references it.

Martyn Ball
  • 4,679
  • 8
  • 56
  • 126

3 Answers3

4

Do it in following way.

let defaults = { test: 'hello world' };
let values = { test: 'beep' };
let merged = Object.assign({}, defaults, values);

merged.test = 'updated';

console.log(defaults)
Sandip Nirmal
  • 2,283
  • 21
  • 24
1

You can try: let merged = Object.assign({}, defaults, values);

Max Peng
  • 2,879
  • 1
  • 26
  • 43
0

Ciao, try to clone deppe your merged array. Here working example using lodash:

let defaults = { test: 'hello world' };
let values = { test: 'beep' };
let merged = Object.assign(defaults, values);
let merged_deepclone = _.cloneDeep(merged);

merged_deepclone.test = 'updated';

console.log(defaults);
console.log(merged_deepclone);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>
Giovanni Esposito
  • 10,696
  • 1
  • 14
  • 30