使用动态非硬编码路径填充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
}
}
}
}
}