我想用dinamically替换父对象内的对象。
对象:
var obj = {
address: { id: 2, type: { id: 1, label: 'Test1' } },
id: 1,
name: 'test'
}
选择器:
var selector = "address.type";
新的内部对象:
var type = { id:2, label: 'Test2' }
现在,替换" obj.address.type"的最佳方式是什么?使用"输入"?
我的attemtp
tmp = selector.split('.'), obj1 = obj;
for(prop in tmp) {
obj1 = obj1[tmp[prop]];
}
答案 0 :(得分:2)
选择器以字符串形式给出,我猜是。
function set(obj, selector, value) {
selector = selector.split(".");
selector.slice(0, -1).reduce(function(obj, s) {
return obj[s]
}, obj)[selector.pop()] = value;
}
set(obj, 'address.type.id', 'foobar');
如果选择器是对象的真正指针,您也可以直接替换它们:
function replaceObject(obj, newObj) {
Object.keys(obj).forEach(function(k) {
delete obj[k];
});
Object.keys(newObj).forEach(function(k) {
obj[k] = newObj[k];
});
}
replaceObject(obj.address.type, {'foo':'bar'});
答案 1 :(得分:1)
詹姆斯·唐纳利正确回答,但是这里有一些快速的代码做我认为你想要实现的......如果我错过了你的目标,我道歉。我不知道你想用选择器变量做什么。
var objArray = [{
address: { id: 2, type: { id: 1, label: 'Test1' } },
id: 1,
name: 'test'
},{
address: { id: 4, type: { id: 3, label: 'Test2' } },
id: 1,
name: 'test'
},{
address: { id: 6, type: { id: 5, label: 'Test3' } },
id: 1,
name: 'test'
}]
var lastId=6;for (var i=0,l=objArray.length;i<l; i++){objArray[i].type={id:++lastId, label:'Test'+lastId}};
JSON.stringify(objArray);