在Component中,我进行了http调用以获取Backend的所有受理人。
组件: -
const req = this.assigneeService.getAssignees();
req.subscribe(
data => {
this.assignees = data['data'];
// On response json will be like below
[
{
name:"Name 3",
id:1,
status:"Not_Assigned"
},
{
name:"Archana",
id:2,
status:"Not_Assigned"
}
]
},
err => {
}
);
点击按钮,下面的函数将调用并创建说objectM。 现在假设我已经用相同的方法创建了2个相同的对象,例如objectM1和objectM2。
public addObj1(): void {
let asignees1 = this.assignees.slice(0);
let objectM = new Module();
objectM.assignees = asignees1;
}
//onchange funtion where object is selected Object, action as string and id of user
changeAssigneeState(object, action, assigneeId ) {
for (let a of object.assignees) {
if (a.id == assigneeId) {
a.status = action;
}
}
}
在objectM中更改id 1的assignee.status。它会影响具有相同id的objectM1和objectM2 assignee.status。
请帮帮我。提前谢谢。
答案 0 :(得分:2)
let asignees1 = this.assignees.slice(0);
clones数组但对象里面有对原始数组中对象的引用,你需要深度克隆对象数组,你可以使用这个简单的技巧来做到: / p>
let asignees1 = JSON.parse(JSON.stringify(this.assignees));
然后你将克隆数组而不引用原始数组。
答案 1 :(得分:1)
深度克隆数组对象将帮助你解决这个问题,
ServerCredentials
答案 2 :(得分:0)
您也可以使用Object.assign()
newAssignes = [];
this.assignees.forEach((assignee, i) => {
this.newAssignes[i] = Object.assign({}, assignee)
});