我有一个包含以下属性的对象数组
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对象复制和引用相关的问题有关吗?任何帮助都是值得的。 感谢
答案 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);
将解决您的问题