728x90
요새 프론트엔드가 js로 코딩테스트 보는게 많아져서
js로 여러 알고리즘 문제를 풀고있는데...
알고리즘 문제를 풀다보면 배열을 초기화 해놓고 그 배열을 이용하는 경우가 많다.
그래서 js도 배열을 초기화하는 메서드 fill 이 있길래 그걸 주로 이용했엇는데
2차원 배열에선 절대 사용하면 안되는걸알았다...
let arr = new Array(4).fill([]);
for(let i=0;i<4;i++){
for(let j=0;j<5;j++){
arr[i][j]= i*j;
}
}
console.log(arr);
arr이 뭐가 출력될거 같은가?
0 0 0 0 0
0 1 2 3 4
0 2 4 6 8
0 3 6 9 12
난 당연히 위와같이 될줄 알았다.
웬걸,
콘솔에 찍어보면
이렇게 나옴..
이유는 fill 메서드가 얕은 복사로 값을 채우기 때문에 빈 배열이 들어가게 되면 같은 주소값을 띄게되어
모든 행이 같은 값을 띄게 된다는 것이다...
한마디로 말하면 fill 사용시 같은 동일한 메모리를 가르키는 참조를 넣어준다...
이거 몰라서 진짜 개고생했음..
그래서 어떻게 초기화 할 수 있냐!
let arr = Array.from({ length: 4 }, () => []);
이렇게 하면 [[],[],[],[]] 형태로 초기화 할 수 있다.
진짜 js는 알아도 알아도 끝이 없다 ㅠㅠ
728x90
'Frontend > Article' 카테고리의 다른 글
rollup-plugin-postcss의 SASS 파일 내 custom alias 처리 문제 (0) | 2023.10.14 |
---|---|
Style Dictionary 사용 방법 정리(feat. 피그마 디자인 토큰 가공하기) (0) | 2023.09.23 |
Storybook path alias 설정 (0) | 2023.09.09 |
자바스크립트의 숫자(Number)형 (Feat. 부동 소수점 vs 고정 소수점) (0) | 2023.05.07 |
VanillaJs로 무한 스크롤 구현하기(feat: Intersection Observer) (0) | 2023.02.12 |