使用javascript和angularjs更新数组?

时间:2015-09-11 10:38:01

标签: javascript angularjs javascript-objects

我有一个包含以下属性的对象数组

vm.projectJson.project.switchboards[index].switchboard[index1].NF.network=[
{
    columnNo: ""
    componentId: "EC1"
    componentName: "CircuitBreaker"
    deviceName: "com.se.ed.exchange_format.electrical_taxonomy.ElectricalDeviceCircuitBreaker"
    deviceProperties: Object
    inTerminal: "ECT1"
    outTerminal: "ECT2"
    productId: ""
    properties: Object
    symbolId: ""
    __proto__: 
},
{
    columnNo: ""
    componentId: "EC1"
    componentName: "CircuitBreaker"
    deviceName: "com.se.ed.exchange_format.electrical_taxonomy.ElectricalDeviceCircuitBreaker"
    deviceProperties: Object
    inTerminal: "ECT1"
    outTerminal: "ECT2"
    productId: ""
    properties: Object
    symbolId: ""
    __proto__: 
}
]

现在基于某些条件我试图在这些对象中添加functionalName属性,但是当我添加或更新一个对象时,另一个对象自动获得具有相同属性和值的更新

angular.forEach(vm.selectedSwitchBoardDetails.ElectricalFunction, function(item2, index2) {
    if(item2.label==item1.id.slice(-1))
    {
        for(var i=0; i<net; i++)
        {
            if(vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].functionalName!==undefined)
            {
                delete vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].functionalName;
                vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].functionalName=item2.value;
                 vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].columnNo=item1.id.slice(-1);
            }
            else{
                vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].functionalName=item2.value;
                vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].columnNo=item1.id.slice(-1);
            }

        }

    }
});

其中item1=vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i]

net是上述数组的长度。

我的代码有什么问题?它与javascript对象复制和引用相关的问题有关吗?任何帮助都是值得的。 感谢

2 个答案:

答案 0 :(得分:0)

如果item2.value是引用类型属性,则所有functionalName属性都将指向同一个对象(因为它是引用类型)。同样的事情适用于item1.id属性。

如果是这种情况,您应该使用angular.copy

vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].functionalName=angular.copy(item2.value);
            vm.projectJson.project.switchboards[index].switchboard[index1].NF.network[i].columnNo=angular.copy(item1.id.slice(-1));

答案 1 :(得分:0)

是的,你的对象正在引用原始对象,即来自内存,所以更喜欢使用

angular.copy(src, destn);

将解决您的问题