我尝试创建一个等同于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] = {}
})
但是我在设置最后一个属性的价值时苦苦挣扎。
答案 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/
您也可以考虑将其转换为函数,以便轻松重复使用它。