Javascript 如何以编程方式添加到可变嵌套对象?

Javascript 如何以编程方式添加到可变嵌套对象?,javascript,object,variable-assignment,Javascript,Object,Variable Assignment,我需要一种方法将一个对象添加到另一个对象中。通常情况下,这非常简单,只需 obj[property] = {'name': bob, 'height': tall} 但是,所讨论的对象是嵌套的,因此需要执行以下操作: obj[prop1][prop2] = {'name': bob, 'height': tall} 不过最关键的是,嵌套是可变的。也就是说,我不知道每个新对象在运行前嵌套的深度。 基本上,我将生成一个表示对象路径的字符串,如 “object.secondObj.thirdObj

我需要一种方法将一个对象添加到另一个对象中。通常情况下,这非常简单,只需

obj[property] = {'name': bob, 'height': tall}
但是,所讨论的对象是嵌套的,因此需要执行以下操作:

obj[prop1][prop2] = {'name': bob, 'height': tall}
不过最关键的是,嵌套是可变的。也就是说,我不知道每个新对象在运行前嵌套的深度。 基本上,我将生成一个表示对象路径的字符串,如

“object.secondObj.thirdObj.forthobj”

然后我需要在第四个对象中设置数据,但是我不能使用括号[]方法,因为我不知道需要预先设置多少个括号。有办法做到这一点吗?
如果有必要,我也在使用jQuery。

当然,您可以使用递归,也可以使用简单迭代。我更喜欢递归。以下示例旨在证明概念,可能不应在生产中使用

var setDeepValue = function(obj, path, value) {
    if (path.indexOf('.') === -1) {
        obj[path] = value;
        return;
    }

    var dotIndex = path.indexOf('.');
    obj = obj[path.substr(0, dotIndex)];

    return setDeepValue(obj, path.substr(dotIndex + 1), value);
};
但递归是不必要的,因为在JavaScript中,您只需更改引用即可

var objPath = 'secondObj.thirdobj.fourthObj';
var valueToAdd = 'woot';

var topLevelObj = {};
var attributes = objPath.split('.');
var curObj = topLevelObj;

for (var i = 0; i < attributes.length; i++) {
    var attr = attributes[i];
    if (typeof curObj[attr] === 'undefined') {
        curObj[attr] = {};
    }

    curObj = curObj[attr];

    if (i === (attributes.length - 1)) {
        // We're at the end - set the value!
        curObj['awesomeAttribute'] = valueToAdd;
    }
}
var objPath='secondObj.thirdobj.fourthObj';
var valueToAdd='woot';
var topLevelObj={};
var attributes=objPath.split('.');
var curObj=topLevelObj;
对于(变量i=0;i
而不是生成字符串

var o="object";
//code
o+=".secondObj";
//code
o+=".thirdObj";
//code
o+=".fourthObj";
…你可以

var o=object;
//code
o=o.secondObj;
//code
o=o.thirdObj;
//code
o=o.fourthObj;
然后可以添加如下数据:

o.myprop='myvalue';
对象
将随更改而更新


请看这里:

我想您可以使用或——应该不难调整。创建这些对象及其数据的数据将如何输入?谢谢!这是完美的。我已经有一段时间用我的头撞这个了:)