首页 > 解决方案 > 我在使用数组 1 中的对象 X 和数组 2 中的对象 Y 减去数量时遇到问题

问题描述

我使用的函数可以,但是当我尝试做减法时,两个数组都被减去了

变量:

let data1 = [
  { ProductTotalId: 30, ProductId: 30, Quantity: 50 },
  { ProductTotalId: 31, ProductId: 29, Quantity: 20 },
  { ProductTotalId: 32, ProductId: 28, Quantity: 30 },
  { ProductTotalId: 33, ProductId: 27, Quantity: 30 },
];

let Remove = [
  { ProductTotalId: 30, ProductId: 30, Quantity: 2 },
  { ProductTotalId: 30, ProductId: 30, Quantity: 10 },
  { ProductTotalId: 31, ProductId: 29, Quantity: 3 },
  { ProductTotalId: 32, ProductId: 28, Quantity: 12 },
  { ProductTotalId: 32, ProductId: 28, Quantity: 2 },
  { ProductTotalId: 33, ProductId: 27, Quantity: 11 },
  { ProductTotalId: 33, ProductId: 27, Quantity: 5 },
]
let data2

功能:

data2 = data1;
for (let value of data2) {
  for (let data of Remove) {
    if (value.ProductId === data.ProductId) {
      value.Quantity = value.Quantity - data.Quantity;
    }
  }

}
console.log(data1);
console.log(data2);

错误是data1 = data2,减去数量,我需要的是data2被减去并且数据1不应该受到任何变化。

Stackblitz 中的链接: https ://stackblitz.com/edit/typescript-u8mzii

谢谢你的时间。

标签: arraystypescript

解决方案


data2 = data1只是为对象创建另一个引用。您没有在data1此处复制对象。因此,如果您对引用进行更改,data2它将影响所引用的对象data1(此处为同一对象)。

创建对象的副本使用以下

data2 = JSON.parse(JSON.stringify(data1));

演示


推荐阅读