查找并替换对象内的对象

时间:2014-11-25 10:29:16

标签: javascript

我想用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]];
}

2 个答案:

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