查找并替换对象中的对象
Find and replace object inside object
我想动态替换父对象中的对象。
对象:
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"替换为"type"的最佳方法是什么?
我的爱心
tmp = selector.split('.'), obj1 = obj;
for(prop in tmp) {
obj1 = obj1[tmp[prop]];
}
我认为选择器是作为字符串给出的。
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'});
詹姆斯·唐纳利回答正确,但这里有一些快速代码,我认为你想要实现......如果我错过了你的目标,我深表歉意。我不知道你想用选择器变量做什么。
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);
相关文章:
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 替换另一个变量对象中的变量值
- 将URL字符串${userid}替换为javascript对象中的实际用户id
- Javascript JSON对象替换对象中的字符串
- 以编程方式将fabric-js-canvas的图像替换为hq图像,并重新计算其他对象的坐标和大小
- 获取 API 响应对象并替换(映射)所有键
- 用jQuery对象替换
- 如何使用不可变对象替换观察者模式
- 将数组中的对象替换为仅引用该对象
- 将一个对象替换为另一个对象
- 使用对象替换switch语句
- 如何将解析中的特定对象替换为用户输入的对象
- 使用 javascript Regexp 对象替换 url 中的值
- 用解析的查询字符串对象替换HTML文本
- React 0.14:纯对象替换
- 将对象替换为保存前已经存在的对象
- 用Flash对象替换图像而不闪烁
- 用新对象替换对象,或清除对象字段
- jQuery美元.扩展导致第一个对象完全被第二个对象替换
- 将命名对象替换为该对象的属性