我正在尝试创建一个JavaScript对象并动态定义其子对象。因此,子项是动态的,它们可能会在运行时更改。
我有什么? var _obj = {};
在下一步中,我想使用函数在运行时设置一些变量。我找不到有效的方法来实现以下功能:
setObjValue("spaceA.spaceB.id", 1);
在以下路径中保存1
:
_obj.spaceA.spaceB.id = 1;
我尝试根据.
拆分密钥,然后使用循环逐步创建路径。但是,由于我们在JavaScript中没有引用,因此无法实现此目的。
换句话说,如何使函数以下列模式添加对象?
_obj["spaceA"]["spaceB"]....["id"] = 1;
答案 0 :(得分:3)
试试这个:
/rest/*
答案 1 :(得分:3)
递归!
var startingObj = {};
var path = "one.two.three.four".split('.');
var val = 7;
function recursiveFun(o, p, v){
var key = p.shift(); // get the current key
if (p.length == 0){
// set key to val and exit
o[key] = val;
return;
}
o[key] = {}; // should check if this exists before overwriting
recursiveFun(o[key], p, v);
}
recursiveFun(startingObj, path, val);
答案 2 :(得分:-1)
这个应该以最有效的方式做到
function setObjValue(path, value) {
path = path.split('.')
var obj = path[0]
// make obj the root
path.shift()
// remove root object from path
while(path.length){
// move further in tree
obj = obj[path[0]]
obj.shift()
}
// assign value
obj = value
}