[Js] 2차원 배열 new Array().fill()로 값 할당할 때 주의할 점

2022. 9. 18. 15:14·Frontend/Article
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을 이용하여 컴포넌트 라이브러리 만들기 ! (React, Ts, Sass, Storybook)  (5) 2023.11.26
rollup-plugin-postcss의 SASS 파일 내 custom alias 처리 문제  (0) 2023.10.14
Storybook path alias 설정  (0) 2023.09.09
자바스크립트의 숫자(Number)형 (Feat. 부동 소수점 vs 고정 소수점)  (0) 2023.05.07
VanillaJs로 무한 스크롤 구현하기(feat: Intersection Observer)  (0) 2023.02.12
'Frontend/Article' 카테고리의 다른 글
  • rollup-plugin-postcss의 SASS 파일 내 custom alias 처리 문제
  • Storybook path alias 설정
  • 자바스크립트의 숫자(Number)형 (Feat. 부동 소수점 vs 고정 소수점)
  • VanillaJs로 무한 스크롤 구현하기(feat: Intersection Observer)
BeNI
BeNI
코딩하는 블로그
  • BeNI
    코딩못하는컴공
    BeNI
  • 전체
    오늘
    어제
    • Menu (255)
      • My profile (1)
      • 회고 | 후기 (8)
      • Frontend (67)
        • Article (10)
        • 모던 자바스크립트 Deep Dive (6)
        • 자바스크립트+리액트 디자인패턴 (3)
        • 기타 (29)
        • 프로그래머스 FE 데브코스 (19)
      • Backend (0)
      • Algorithm (58)
        • Solution (46)
        • Study (12)
      • Major (111)
        • C&C++ (23)
        • Java (20)
        • Data Structure (14)
        • Computer Network (12)
        • Database (15)
        • Linux (6)
        • Architecture (3)
        • Lisp (15)
        • OS (1)
        • Security (2)
      • etc (2)
  • 블로그 메뉴

    • 깃허브
    • 관리
  • 링크

    • 깃허브
    • 방명록
  • 공지사항

  • 인기 글

  • 태그

    리팩토링
    데브코스
    react
    C++
    lisp
    백준
    자료구조
    프로그래머스
    JavaScript
    Algorithm
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
BeNI
[Js] 2차원 배열 new Array().fill()로 값 할당할 때 주의할 점
상단으로

티스토리툴바