>

함수를 사용하지만 빼기를 시도하면 두 배열이 빼집니다

변수 :

   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

시간 내 주셔서 감사합니다.

  • 답변 # 1

    data2 = data1  객체에 대한 다른 참조를 만드는 것입니다. 오브젝트 data1 의 사본을 작성하지 않습니다  이리. 따라서 data2 참조를 변경하면   data1 가 참조하는 오브젝트에 영향을 미칩니다.  (여기서는 같은 물체).

    다음에 객체 사본을 만들려면

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

    DEMO

  • 답변 # 2

    문제는 데이터 구조입니다.

    data2 = data1;  이 코드는 2 개의 배열을 만들지 않습니다.

    Data2도 처음에 Data1이 가리키는 것을 가리키고 있습니다. 2 개의 배열을 가지려면 배열을 만들고 array1의 모든 내용을 삽입해야합니다.

    대신해야합니다 :

    const data2= Object.assign([], data1);
    
    

    이제 복제본을 갖게됩니다.

  • 답변 # 3

    data1 를 원하지 않으면   data2 의 변화로 고통 , 당신은 data1 의 사본을 만들어야합니다   data2 로 . 다음 방법을 사용하여 data1 를 복사 할 수 있습니다   data2 로 .

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

    이것은 먼저 문자열 화 (JSON it) data1 그런 다음 결과를 data2 로 구문 분석하십시오.   data1 와 동일합니다.  동일하지는 않습니다.

관련 자료

  • 이전 sql - 오라클 - where 절로 복제 선택?
  • 다음 java - 복합 키에 사용될 때 스프링 데이터/최대 절전 모드 쿼리에서 JPA AttributeConverter가 적용되지 않음