【问题标题】:Change a value of a key by Variable string in nested object通过嵌套对象中的变量字符串更改键的值
【发布时间】:2021-11-28 14:17:02
【问题描述】:

我有一个具有某些属性的状态对象 例如

function (location){ obj = { kids : { eyal : 21, noam :15 } pets : { dog : 5, cat :2 } } }

现在我想更改 eyal 值

location = "kids.eyal"

如果我在做

setobj((prevobj) => { ...prevobj, [location] : 22 })

它在 obj Kids.eyal = 22 中创建新参数,而不是将 kids 中的 eyal 更改为 22 我该如何解决?

【问题讨论】:

标签: javascript reactjs object


【解决方案1】:

逻辑。

  • . 上拆分位置
  • 遍历除最后一个节点之外的位置数组。
  • 将作为所需目标的最后一个节点对象替换为所需值。

工作小提琴

const obj = { kids : { eyal : 21, noam :15 }, pets : { dog : 5,  cat :2 } };
const targetLocation = "kids.eyal";
const pathArray = targetLocation.split('.');
const lastNode = pathArray[pathArray.length - 1];
let node = obj;
pathArray.forEach((path, index) => node = index === pathArray.length - 1 ? node : node [path]);
node[lastNode] = 22;
console.log(obj);

【讨论】:

    【解决方案2】:

    我想你想要这样的东西:

    oldObj = { kids : { eyal : 21, noam :15 } }
    
    function updateOneKidAge(obj,theKid) 
    {
      const [kidName, newAge] = Object.entries(theKid)[0]
      return { kids : {...obj.kids, [kidName]: newAge}};
    } 
    
    console.log(updateOneKidAge(oldObj, {eyal: 22}))
    

    【讨论】:

    • 它不会有帮助,因为需要更改的对象是基于函数获取的参数,如果有两个嵌套对象将无法正常工作
    【解决方案3】:

    您不能在 [] 括号内使用 obj.property 格式。您必须分别发送这两个属性。类似的东西

    location = ["kids","eyal"]
    

    然后将其用作:

    setobj((prevobj) => { ...prevobj, [location[0]][location[1]] : 22 })
    

    希望能解决问题

    【讨论】:

      猜你喜欢
      • 2020-11-19
      • 2015-12-23
      • 2016-03-19
      • 2018-01-30
      • 2021-10-23
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2017-07-25
      相关资源
      最近更新 更多