이상한 경험을 했다.
배열 안에 빈 배열을 내가 원하는 갯수만큼 만들고 싶었다.
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개의 빈 배열이 들어가면 되었는데,
복잡하게 생각하지 않고, 리터럴로 사용했다.
[[], [], [], [], [], [], []];
나중에 배열 초기화를 해야하고 원소가 배열이나 객체라면, 동적으로 초기화 해야하거나, 엄청 많은 경우 위의 링크를 참고해야겠다.