通过循环创建具有值的深层对象

时间:2014-09-14 19:25:50

标签: javascript object

我尝试创建一个等同于user['address']['street'] = VALUE

的深层对象

如果我有一个字符串:

var user = 'user[address][street]' 
user.split(/[[\]]{1,2}/).slice(0,-1);    // which gives me [user, address, street]

我试图获得:

user: {
    address: {
        street : VALUE
    }
}

我已经设法弄清楚如何创建深层对象:

var newObj = obj
split.forEach(function(item){
    newObj = newObj[item] = {}
})

但是我在设置最后一个属性的价值时苦苦挣扎。

http://jsfiddle.net/catc/8LfLk5a5/

1 个答案:

答案 0 :(得分:1)

您需要添加一项检查,看看您是否在列表中的最后一项,然后分配值。

var newObj = obj
var last = split.length - 1;
split.forEach(function(item, idx){
    newObj = newObj[item] = (idx == last) ? value : {};
});

此处示例:http://jsfiddle.net/THEtheChad/qfn9ny4n/

修改

您也可以考虑将其转换为函数,以便轻松重复使用它。

此处示例:http://jsfiddle.net/THEtheChad/owvu7t7h/