在嵌套对象中设置值

ant*_*_ku 1 javascript

我尝试通过键将值设置到嵌套数组中。

我的对象看起来像

var Obj = {
  key1: {
    key2: value,
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试通过key1.key2喜欢设置 key1

const name = `key1.key2`

Obj[name] = value
Run Code Online (Sandbox Code Playgroud)

我知道我需要这样做,Obj['key1']['key2']但我只得到一个string看起来像key1.key2

Tex*_*Tex 6

如果你不介意使用图书馆,Ramdalodash提供辅助功能,使这种操作非常简单

使用 Ramda(对于这个特定的操作,比 lodash 稍微冗长一些,但我更喜欢 Ramda 而不是 lodash):

const Obj = {
  key1: {
    key2: 1,
  }
}

const name = `key1.key2`

console.log(
  R.assocPath(name.split('.'), 2, Obj)
)
// --> { key1: { key2: 2 } }
 
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

使用 lodash:

const Obj = {
  key1: {
    key2: 1,
  }
}

const name = `key1.key2`

console.log(
  _.set(Obj, name, 2)
)
// --> { key1: { key2: 2 } }
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)