Angular 更新复制对象中的值会影响角度5中所有其他复制对象的值
在组件中,我进行了http调用以从后端获取所有被分配者 组件:-Angular 更新复制对象中的值会影响角度5中所有其他复制对象的值,angular,typescript,angular5,Angular,Typescript,Angular5,在组件中,我进行了http调用以从后端获取所有被分配者 组件:- const req = this.assigneeService.getAssignees(); req.subscribe( data => { this.assignees = data['data']; // On response json will be like below [ { name:"N
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 => {
}
);
单击按钮,下面的函数将调用并创建say objectM。
现在假设我用相同的方法又创建了两个相同的对象,比如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.status
请帮帮我。提前感谢。让asignees1=this.assignees.slice(0)代码>克隆数组但是内部的对象引用了原始数组中的对象,您需要获得对象数组的深度克隆,您可以使用以下简单技巧完成此操作:
let asignees1 = JSON.parse(JSON.stringify(this.assignees));
然后,您将拥有不引用原始数组的克隆数组。让asignees1=this.assignees.slice(0)代码>克隆数组但是内部的对象引用了原始数组中的对象,您需要获得对象数组的深度克隆,您可以使用以下简单技巧完成此操作:
let asignees1 = JSON.parse(JSON.stringify(this.assignees));
然后您将克隆阵列,而不引用原始阵列。阵列对象的深度克隆将帮助您解决此问题。请尝试此操作
let asigneesData = JSON.parse(JSON.stringify(this.assignees));
数组对象的深度克隆将帮助您解决此问题
let asigneesData = JSON.parse(JSON.stringify(this.assignees));
您还可以使用
Object.assign()
您也可以使用
Object.assign()