如何克隆对象数组 TypeScript?
How to clone array of objects TypeScript?
我试过这种方法:
this.plans = [];
this.plansCopy = [...this.plans];
似乎它不起作用导致 returns 重复。
展开运算符returns 数组的各个项目。如果这些已经是对象,那么它会将 references 返回给这些对象。这是创建新数组的 []
部分。因此你有一个新数组,但它仍然包含相同的对象引用,所以 this.plans[0].oper()
也会同时调用 this.plansCopy[0].oper()
。
相反,您需要克隆每个单独的对象。有很多不同的方法可以做到这一点(创建数组或单个对象的深层副本)。如果您只需要一级克隆,您可以这样做:
this.plansCopy = this.plans.map(obj => ({...obj}));
这将创建一个新数组,其中每个元素都是每个对象的副本。
回答得很好。主要问题是您可能会遇到 copying 引用的问题,而不是 duplicating 它,在数组的更深层。如果你知道你只有简单的对象,你也可以使用
const newArray = Array.from(oldArray);
我发现它比传播运算符更清晰。
但是,如果您不知道数组的复杂程度(即非简单类型的嵌套深度),一般答案似乎是
this.backupData = JSON.parse(JSON.stringify(genericItems));
因为这将全部沿着数组对象的方向向下移动,并重新构建它们——一般情况下的克隆。
我试过这种方法:
this.plans = [];
this.plansCopy = [...this.plans];
似乎它不起作用导致 returns 重复。
展开运算符returns 数组的各个项目。如果这些已经是对象,那么它会将 references 返回给这些对象。这是创建新数组的 []
部分。因此你有一个新数组,但它仍然包含相同的对象引用,所以 this.plans[0].oper()
也会同时调用 this.plansCopy[0].oper()
。
相反,您需要克隆每个单独的对象。有很多不同的方法可以做到这一点(创建数组或单个对象的深层副本)。如果您只需要一级克隆,您可以这样做:
this.plansCopy = this.plans.map(obj => ({...obj}));
这将创建一个新数组,其中每个元素都是每个对象的副本。
回答得很好
const newArray = Array.from(oldArray);
我发现它比传播运算符更清晰。
但是,如果您不知道数组的复杂程度(即非简单类型的嵌套深度),一般答案似乎是
this.backupData = JSON.parse(JSON.stringify(genericItems));
因为这将全部沿着数组对象的方向向下移动,并重新构建它们——一般情况下的克隆。