배열 초기화

배열 초기화 (이중배열)

배열을 초기화할 때 쓸 수 있는 두 가지 방법:

  • Array.prototype.fill()
  • Array.from()

Array.prototype.fill()

배열을 채울 값으로 객체를 받을 경우 그 참조만 복사해서 배열을 채운다.

function solution(n, arr1, arr2) {
    const map = new Array(n).fill(new Array(n).fill("*"));
    map[1][2] = "H";
    return map;
}

solution(5)

위 코드의 결과가

['*', '*', '*', '*', '*'],
['*', '*', 'H', '*', '*'],
['*', '*', '*', '*', '*'],
['*', '*', '*', '*', '*'],
['*', '*', '*', '*', '*']

이게 아니라

['*', '*', 'H', '*', '*'],
['*', '*', 'H', '*', '*'],
['*', '*', 'H', '*', '*'],
['*', '*', 'H', '*', '*'],
['*', '*', 'H', '*', '*']

이렇게 나온다는 뜻이다! (이렇게 배열을 초기화하면 배열 속의 모든 배열이 똑같은 참조값을 가지게 되어버리기 때문)

그래서 의도대로 map[1][2] = "H를 했을 때 map[1][2] 자리의 아이템만 H로 바꾸고 싶다면 Array.prototype.fill()이 아닌 Array.from()을 사용해 배열을 초기화해야 한다.

function solution(n, arr1, arr2) {
    const map = Array.from({ length: n }, () => Array(n).fill("*"));
    map[1][2] = "H";
    return map;
}
Maintained with 🤍
Built with Hugo
Theme Stack designed by Jimmy