更改深层嵌套对象值

Sys*_*ter 1 javascript object node.js

这似乎是显而易见的,但我无法弄清楚如何缩短代码中多个位置的深度嵌套对象值的更改,而无需每次重新键入该值的键路径:

> obj = { 'key1': { 'key2': { 'key3': { 'key4': { 'key5': 'value' }}}}}
> obj.key1.key2.key3.key4.key5
'value'
Run Code Online (Sandbox Code Playgroud)
> obj.key1.key2.key3.key4.key5 = 'changeme'
> obj.key1.key2.key3.key4.key5
'changeme'

> obj.key1.key2.key3.key4.key5 = 'changeme2'
> obj.key1.key2.key3.key4.key5
'changeme2'
Run Code Online (Sandbox Code Playgroud)

syn*_*t1c 9

您可以使用一些递归来迭代对象中的每个键并更新找到匹配键的位置。

const obj = { 'key1': { 'key2': { 'key3': { 'key4': { 'key5': 'value' }}}, 'key5': 'test'}}

const mutateObjectProperty = (prop, value, obj) =>
  obj.constructor === Object && Object.keys(obj).forEach(key => {
    if (key === prop) obj[key] = value
    mutateObjectProperty(prop, value, obj[key])
  })
    
mutateObjectProperty('key5', 'updated', obj)

console.log(obj)
Run Code Online (Sandbox Code Playgroud)