0

Given the object

var a = {
  'key1': {
    'key2': 'value2'
  },
  'key3': 'value3'
}

What I am trying to build?

a method which can update object a as follows :

  1. a['key1.key2'] = 'value12' => updates value of key2 in child object a.key1.

  2. a['key1.key4'] = 'value14' => create new object in child object a.key1

Bla Mrbka
  • 79
  • 2
  • 4

1 Answers1

-2

You can use reduce() get the nested object and then set the key to given value.

var a = {
  'key1': {
    'key2': 'value2'
  },
  'key3': 'value3'
}

function changeNestedValue(obj, path, value){
   path = path.split('.');
   let last = path.pop();
   path.reduce((ac,a) => ac[a], obj)[last] = value
}

changeNestedValue(a, 'key1.key2', 'changed 1')
changeNestedValue(a, 'key1.key4', 'added')
console.log(a)
Maheer Ali
  • 35,834
  • 5
  • 42
  • 73