Back

Array.prototype.fill()

이상한 경험을 했다.

배열 안에 빈 배열을 내가 원하는 갯수만큼 만들고 싶었다.

Array.prototype.fill()을 사용했다. fill 메소드 안에 빈 배열을 넣었는데, 넣은 배열 중 하나에 push를 하니까 모든 배열에 push가 된다..

fill 에 [] 리터럴로 넘기지 않고 new Array를 하여도 동일하다.

이는 객체를 넣어도 동일한데 느낌상 참조형을 넣으면 내부에 채운 것들의 주소값이 모두 똑같이 복사되는 것 같다.

Array.prototype.fill() with object passes reference and not new instance

검색을 해보니 나와 같은 경험을 해본 사람이 작성한 질문이 있다.

해결 방법을 보니까

const arr = new Array(2).fill().map((\_) => []);

빈배열 만들고 loop 돌려서 하나씩 넣어준다.

그리고 다른 사람이 덧글로 말하기를 이렇게 하면 성능상에 문제가 있어서 고전적인 for loop를 사용하라고 한다.

나는 동적으로 변경될 필요도 없고 정확하게 내부에 7개의 빈 배열이 들어가면 되었는데,

복잡하게 생각하지 않고, 리터럴로 사용했다.

[[], [], [], [], [], [], []];

나중에 배열 초기화를 해야하고 원소가 배열이나 객체라면, 동적으로 초기화 해야하거나, 엄청 많은 경우 위의 링크를 참고해야겠다.