2차원 배열을 만들 때 주의점

zimablue·2023년 8월 29일

javascript

목록 보기
23/30

배열을 만드는 법은 여러가지가 있습니다.
저는 new Array()Array.from()을 사용하여 만듭니다.
2차원 배열을 만들 때도 위의 메서드를 사용하여 만드는데 주의할 점이 있습니다.



new Array(n).fill()을 두 번 사용

function solution(n) {
    const answer = new Array(n).fill(new Array(n).fill(0))
    // [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ]

    
    for (let i = 0; i < n; i++) {
        answer[i][i] = 1;
    };

    return answer;
    // [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
};

solution(3);

new Array(n).fill(new Array(n).fill(0)) 에서 .fill() 로 생성한 배열은 동일한 객체를 참조합니다.
따라서 한 내부 배열의 요소를 변경하면, 다른 내부 배열에도 같은 변경이 반영됩니다.


Array.from()과 new Array().fill을 한 번씩 사용

function solution(n) {
	const answer = Array.from({length: n}, () => new Array(n).fill(0));
	// [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ]
  
	for (let i = 0; i < n; i++) {
    	answer[i][i] = 1;
  	};

  	return answer;
  	// [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
};

solution(3);

Array.from() 의 콜백 함수는 매번 새로운 내부 배열 객체를 생성하여 각 요소에 할당합니다.
따라서 각 내부 배열은 독립적인 객체로써 각자 다른 참조를 가지고 있습니다. 그래서 한 내부 배열의 요소를 변경하더라도 다른 내부 배열에는 영향을 주지 않습니다.





추가 정보

Array.from() 메서드가 new Array().fill() 메서드 보다 메모리 사용이 높은 것 같습니다.

0개의 댓글