[Javascript] 2차원 배열 만들기 (feat. Array.from())

곽형조 (KCena)·2020년 7월 12일
2

2차원 배열 만들기

주로 BFSDFS 문제를 풀면서 현재 위치를 다시 방문하지 않기 위한 2차원 배열을 만든다.
주어진 2차원 배열 데이터와 행, 열이 같고 true, false 값을 원소로 갖는 2차원 배열을 만들 때 아래와 같이 중첩 반복문을 사용해서 만들 수 있다.

초기 값이 모두 false인 2차원 배열을 만들어 보자.

function getVisited(row, col) {
  const visited = []
  for(let i=0; i<row; i++) {
    const temp = [];
    for(let j=0; j<col; j++) {
      temp.push(false);
    }
    visited.push(temp);
  };
  return visited;
}

더욱 간단하게 만들어 보자.

Array.from() 메서드는 유사 배열 객체(array-like object)나 반복 가능한 객체(iterable object)를 얕게 복사해 새로운 array를 만든다. 또는 ES6의 Array.map을 사용할 수 있다.

//Array.from 의 사용
const getVisited = (row, col) =>
  Array.from(Array(row), () => Array(col).fill(false));
  
//Array.map 의 사용
const getVisited = (row, col) =>
  Array(row)
    .fill(null)
    .map(() => Array(col).fill(false));

Array.from을 이용한 Sequence 생성기

Array.from() 으로 새 Array를 만드려면 arrayLike 매개변수 자리에 유사 배열 객체나 반복 가능한 객체를 넣어 주어야 한다. 여기서 유사 배열 객체는 length 속성과 인덱싱된 요소를 가진 객체라고 하는데, 아래의 예제를 보면 length 값이 들어있는 객체를 arrayLike 자리에 넣어주고 있다.

// 수열 생성기
// 배열을 처음 만들었을 때 초기값은 모두 undefined로 되어 있음,
// 따라서 v는 undefined.
Array.from({length: 5}, (v, i) => i);
// [0, 1, 2, 3, 4]

이를 이용하면 수열 생성기를 만들 수 있다.

// 수열 생성 함수.
const range = (start, stop, step) =>
  Array.from({ length: (stop - start) / step + 1 }, (_, i) => start + i * step);

// 0에서 4까지 1씩 증가하는 수열.
range(0, 4, 1);
// [0, 1, 2, 3, 4] 

// 1에서 10까지 2씩 증가하는 수열.
range(1, 10, 2); 
// [1, 3, 5, 7, 9]

// 알파벳 수열 만들기.
// .charCodeAt() : 특정 위치에 있는 문자의 유니코드 값을 반환합니다.
// String.fromCharCode(n1, n2 ...): 유니코드 숫자를 문자로 바꿔줍니다.
range('A'.charCodeAt(0), 'Z'.charCodeAt(0), 1).map(x => String.fromCharCode(x));
// ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]

0개의 댓글