Articles

#ES6 배열을 복제하는 방법🐑

배열을 복사해야 할 때 슬라이스를 자주 사용했습니다. 그러나 ES6 을 사용하면 스프레드 연산자를 사용하여 배열을 복제 할 수도 있습니다. 나는 배열을 복사하기 위해=를 사용할 수없는 이유는 무엇입니까?

기 때문에 배열에 JS 은 참고 값,그래서 당신이 시도하는 복사를 사용하는=그것만 복사합니다 참조하여 원래의 배열과하지 않는 값의 배열입니다. 배열의 실제 복사본을 만들려면 새 값 변수 아래 배열의 값 위에 복사해야합니다. 그렇게하면이 새로운 배열은 메모리의 이전 배열 주소를 참조하지 않습니다.

const sheeps = ;const fakeSheeps = sheeps;const cloneSheeps = ;console.log(sheeps === fakeSheeps);// true --> it's pointing to the same memory spaceconsole.log(sheeps === cloneSheeps);// false --> it's pointing to a new memory space

#참조 값 문제

혹시 Redux 또는 상태 관리 프레임 워크를 처리 한 경우. 불변성이 매우 중요하다는 것을 알게 될 것입니다. 간단히 설명해 드리겠습니다. 불변 객체는 생성 된 후에 상태를 수정할 수없는 객체입니다. JavaScript 의 문제점은arrays가 변경 가능하다는 것입니다. 그래서 이런 일이 일어날 수 있습니다:

const sheeps = ;const sheeps2 = sheeps;sheeps2.push('🐺');console.log(sheeps2);// // Ahhh 😱 , our original sheeps have changed?!console.log(sheeps);// 

의해야 하는 이유를 알려 주는 복제는 배열

const sheeps = ;const sheeps2 = ;// Let's change our sheeps2 arraysheeps2.push('🐺');console.log(sheeps2);// // ✅ Yay, our original sheeps is not affected!console.log(sheeps);// 

#변경 가능 vs 변경할 수 없는 데이터의 유형

변경 가능:

  • 개체
  • 배열
  • 기능

불변:

모든 프리미티브는 변경할 수 없습니다.

  • 문자열
  • 번호
  • boolean
  • null
  • undefined
  • 상징

#얕은 복사본을 만

참고spread만 간다 하나의 수준의 깊은 경우 복사하는 훌륭한 기능들을 가지고 있습니다. 따라서 다차원 배열을 복사하려고한다면 다른 대안을 사용해야 할 것입니다.

const nums = , ];const cloneNums = ;// Let's change the first item in the first nested item in our cloned array.cloneNums = '👻';console.log(cloneNums);// , , ]// NOOooo, the original is also affectedconsole.log(nums);// , , ]

🤓내가 배운 흥미로운 점이 있습니다. 얕은 복사는 첫 번째 레벨이 복사되고 더 깊은 레벨이 참조됨을 의미합니다.

#커뮤니티 입력

#배열.에서 또 다른 방법으로 복제하 배열

const sheeps = ;const cloneSheeps = Array.from(sheeps);

_Thanks:@hakankaraduman_

  • _@hakankaraduman :_그렇다,나는 사용하지 않으려고 확산,그것이 나를 혼동을 읽을 때 코드기 때문에 그것은 두 가지 않,확산 또는 수집하는 컨텍스트에 따라

  • CJ J:내가 생각하는 가장 좋은 방법은 중 하나에 가장 부합하는 의미의 작업입니다. 나는Array.from

을 사용하는 것을 선호합니다