Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用动态非硬编码路径填充javascript对象中的深键/值_Javascript - Fatal编程技术网

使用动态非硬编码路径填充javascript对象中的深键/值

使用动态非硬编码路径填充javascript对象中的深键/值,javascript,Javascript,我有 现在我想写一个函数,它将在一个动态的路径上插入一个新的键/值,并且可以在不同的调用之间进行更改 let mydata = { section_a: { color: "red", shape: "cube" }, section_b: { length: 34 } } 使mydata成为: let path = "section_b.go.real.deep"; let newKey = "age"; let newVal = 50;

我有

现在我想写一个函数,它将在一个动态的路径上插入一个新的键/值,并且可以在不同的调用之间进行更改

let mydata = { 
  section_a: { 
     color: "red", 
     shape: "cube"
  },
  section_b: {
     length: 34
  }
}
使mydata成为:

let path = "section_b.go.real.deep";
let newKey = "age";
let newVal = 50;

有什么技术可以允许这样的事情吗?创建一个深层元素,以及任何潜在的动态层次结构?

也许您正在寻找这样的东西:

让mydata={ 第a节:{ 颜色:红色, 形状:立方体 }, b节:{ 长度:34 } }; 让path=section_b.go.real.deep; 让newKey=年龄; 设newVal=50; var items=path.split。; var项目=mydata; 对于项目的var属性{ 如果!项目[道具]{ 项目[prop]={}; } 项目=项目[道具]; }; 项目[newKey]=newVal; console.logmydata 这是一条单行线:

让mydata={ 第a节:{ 颜色:红色, 形状:立方体 }, b节:{ 长度:34 } }; 让path=section_b.go.real.deep; 让newKey=年龄; 设newVal=50; path.split..reduceobj,key=>obj[key]| | obj[key]={},mydata[newKey]=newVal;
console.logmydata;这回答了你的问题吗?注意:上面的链接主要讨论访问属性,但是将它们修改为set非常简单,或者已经存在相关的对应项,例如,讨论的是lodash的uu.get,但您只需要lodash的u.set。还请注意,该主题中有链接,指向更多类似主题,这些链接详细讨论了这一点。奇怪的是,它在这里起作用,但复制到其他地方的代码不起作用。知道为什么吗?@JasonGenX它可以工作,只需console.log使输出更短,注意真实的:[Object]谢谢,这是最优雅的解决方案。
 { 
      section_a: { 
         color: "red", 
         shape: "cube"
      },
      section_b: {
         length: 34,
          go: {
             real: {
                deep: {
                   age: 50
                }
             }
          }
      }
    }