배열 할당 포인팅 및 복사에 대한 질문

다음과 같은 코드가 있습니다.

// 构建数据
let obj = {name: '名字' ,age: 18};
let list = [];
for(let i=0; i<60; i++) list.push(obj)

// 开始处理数据
let Arr = [];
let cloneArr = [];
for(let j=0; j<2; j++) Arr.push(cloneArr)
list.map((item,inx) => {
  if(inx < 50) Arr[0].push(item);
  else if(inx >= 50 && inx < 100) Arr[1].push(item);
})
console.log(Arr)

우리의 이상적인 상태는 이래야 합니다.

하지만 실제 결과는

내부배열 포인팅과 복사할당 문제가 있는데 for루프를 통해 Arr에 대한 내부배열을 동적으로 생성할 때 여기서 push하는 것은 이전에 선언한 배열변수 cloneArr이다. Arr[0] 또는 Arr[1]의 배열 변수 cloneArr, Arr[0] 및 Arr[1]은 모두 cloneArr을 가리킵니다. 이 문제를 해결하기 위해 배열을 동적으로 푸시할 때 다음 두 가지를 사용할 수 있습니다. Arr Way 내부:

1. 딥 카피를 직접 사용하여 값을 할당하고 맵 루프에서 Arr의 내부 배열을 작동합니다. 딥 카피 효과로 인해 포인터가 배열 변수 cloneArr을 가리키지 않습니다.

Arr.push(JSON.parse(JSON.stringify(cloneArr)))

2. cloneArr을 포기합니다. 푸시할 때마다 새 배열이 직접 생성되며 포인팅 및 복사 기능이 없습니다.

Arr.push([])

팁: 많은 사람들이 작업 세부 사항에서 이러한 문제에 직면하지만 많은 사람들이 이해하지 못합니다.사실 원칙을 이해하는 한 실제로는 매우 간단합니다.

추천

출처blog.csdn.net/qq_42660374/article/details/129588741