【发布时间】:2018-07-24 22:25:57
【问题描述】:
我正在尝试从数组中删除一个对象。所以我使用了splice,但在拼接之前我复制了一个对象
this.program.lstProgramdetails.forEach((lph: any) => {
this.rtGridUp = Object.assign({}, lph);
this.rtGridMid = Object.assign({}, lph);
this.rtGridDown = Object.assign({}, lph);
lph.Details.forEach((inm: any, index: number) => {
if (inm.Track !== null && inm.Track.TrackDateIn !== null) {
this.rtGridMid.Details.splice(index, 1);
this.rtGridDown.Details.splice(index, 1);
} else if (inm.Track === null) {
this.rtGridUp.Details.splice(index, 1);
this.rtGridDown.Details.splice(index, 1);
} else {
this.rtGridUp.Details.splice(index, 1);
this.rtGridMid.Details.splice(index, 1);
}
});
});
根据条件,两个数组应该被切片,一个应该得到对象而不拼接。
但是在控制台中观看它会清除所有 3 个数组。 有没有什么方法可以在不影响复制对象的情况下拼接该对象?
【问题讨论】:
-
您正在创建浅拷贝。您要么必须使用递归进行深拷贝,要么如果您只需要
Details数组的副本,您可以使用数组解构来制作它的浅拷贝,例如const copy = [...lph.Details] -
实现您想要的另一种方法是使用像
slice这样的纯函数,而不是创建对象的“第一级”副本,因为嵌套对象仍然是引用。 -
能否详细说明。
标签: javascript typescript angular5