假设我有一个对象,我想设置一个深嵌套在这个对象中的变量,但var还不存在。最好的方法是什么?例如,如果我有一个字符串,显示要更新的变量应该在哪里,如下所示。
var myObject = {};
var location = "myObject.test.myVar";
var value = "My value!";
setValue(location, value, myObject);
我希望这会导致:
myObject = {
test: {
myVar: "My value!"
}
};
位置可能比那更深。 任何帮助表示赞赏! 谢谢! 安德烈亚斯
答案 0 :(得分:2)
此功能可以满足你的需要 请注意,它通过引用更改对象 注意它忽略了名字,因为它是对象本身。
function setValue(location, value, object)
{
var path = location.split(".");
var current = object;
for (var i = 1; i < path.length; i++)
{
if ((i + 1) == path.length)
current[path[i]] = value;
else
{
current[path[i]] = {};
current = current[path[i]];
}
}
}
答案 1 :(得分:1)
var myObject = {};
var location = "test.my.deep.hidden.nested.myVar";
var otherLoc = "test.my.deep.secret.var";
var value = "My value!";
function setValue(location, value, obj){
var i, prev = obj, curr;
location = location.split(".");
for(i = 0; i < location.length - 1; ++i){
curr = prev[location[i]];
if("object" !== typeof curr){
prev[location[i]] = {}
curr = prev[location[i]];
}
prev = curr;
}
curr[location[i]] = value;
}
setValue(location, value, myObject);
setValue(otherLoc, 42, myObject);
console.log(JSON.stringify(myObject));
结果:
{
"test": {
"my": {
"deep": {
"hidden": {
"nested": {
"myVar": "My value!"
}
},
"secret": {
"var":42
}
}
}
}
}
请注意,您可能需要添加一些功能,例如检查位置是否实际有效("this.is..invalid"
)。
答案 2 :(得分:-1)
您可以通过Dot(。)
简单地访问另一个对象内的对象因此,在您的情况下,您使用引号指定表达式。你可以尝试一下
var location = myObject.test.myVar; //Without quotes
同样如果你有更多的嵌套对象。