查找并替换对象中的对象

Find and replace object inside object

本文关键字:对象 替换 查找      更新时间:2023-09-26

我想动态替换父对象中的对象。

对象:

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);