javascript - 如何通过提供对象键数组来动态修改对象值?

标签 javascript arrays reactjs object

因为我正在处理一个相对较大的对象,所以我希望能够通过定义“路径”来动态修改我的对象值。

let a="x", b="y", c="z"

let objKeys = [a, b, c]

let value = 5

obj = {x: 
        {y: 
          {z: 1
          }
         }
       }


我希望能够实现这一目标。

obj[a][b][c] = value;

有什么办法可以做到这一点吗?我试过obj(eval(`["a"]["b"]["c"]`)) = value但它说“赋值中的左侧无效”。

最佳答案

您可以通过使用数组归约函数来实现此目的:

const objProps = ["a","b","c"]
const value = 5
const newObj = objProps.reverse().reduce((result, curProp)=> (
{
    [curProp]: result
  }
), value)

console.log(newObj)

这将从 objProps 中的最后一个值开始,将 prop 相互“链接”在一起。因为您想使用名称作为索引,所以使用对象而不是数组。

编辑:好的,所以我再次阅读了您的问题,据我了解,您不想创建新对象,而是通过定义路径来修改大对象内部的值。为此,请查看 lodash。此库有一个方法 set,您可以在其中提供属性位置的路径并设置新值 ( https://lodash.com/docs/4.17.11#set )。

关于javascript - 如何通过提供对象键数组来动态修改对象值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56175074/

相关文章:

Javascript循环并连接2个数组

c - 从数组打印时元素值显示不正确

javascript - react : Prevent remount when parent rerenders

javascript - 悬停效果与 jQuery 影响容器 div

javascript - 谷歌的 shebang#! ajax 抓取的语法不会导致抓取的页面

javascript - 什么是暂时死区?

php - PHP中未知数量的数组相交

ios - Swift:按多个条件对嵌套数组进行分组 - 改进算法

javascript - 如何通过传递参数从列表数组中检索特定数据作为字符串?

reactjs - 当 React Element 作为 Prop 传递时防止重新渲染