JS' 공부흔적

[JavaScript] 2차원 배열에서 includes 사용하기 (flat() 메서드) 본문

JavaScript

[JavaScript] 2차원 배열에서 includes 사용하기 (flat() 메서드)

이준수 2023. 5. 17. 09:43

백준 문제를 풀던 중, 2차원 문자 배열에서 특정 문자가 포함되어 있는지 판별해야 했다. 그러나 2차원 배열에서 includes를 사용하게 되면 아래와 같은 문제가 발생한다.

const arr = [
  ["a", "b", "c"],
  ["d", "e", "f"],
  ["g", "h", "i"],
];

console.log(arr.includes("a")); // false

이는 includes 메서드에서 "a"와 2차원 배열 내의 각 row와 비교하기 때문이다. "a"와  ["a", "b", "c"]와 같은 1차원 배열은 당연히 같지 않으므로 false가 출력되게 된다.

 

이를 해결하기 위해서는 배열의 flat() 메서드를 사용하면 된다. flat()은 다차원 배열의 원소를 1차원 배열로 만들어주는 기능을 한다.

flat()은 매개변수로 depth를 받는데, 기본값은 1이다. 따라서 기본적으로 1번의 depth까지 탐색하여 중첩 배열 구조를 평탄화(1차원 배열로 변환)한다. 즉, depth를 설정하지 않으면 2차원 배열까지 탐색하여 1차원으로 변경해준다. 따라서 위의 코드를 아래와 같이 수정하면 원하는 결과를 얻을 수 있다.

const arr = [
  ["a", "b", "c"],
  ["d", "e", "f"],
  ["g", "h", "i"],
];

console.log(arr.flat().includes("a")); // true

 

depth를 설정한 경우

아래의 예시를 보면 flat() 메서드를 좀 더 이해하기 쉬울 것이다.

const arr = [1, 2, [3, 4, [5, 6]]];
console.log(arr.flat());
// [1, 2, 3, 4, [5, 6]]

console.log(arr.flat(2));
// [1, 2, 3, 4, 5, 6]

 

또한, depth를 Infinity로 설정하여 depth 탐색 제한이 없이 무조건 1차원 배열로 변환할 수도 있다.

const arr = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
console.log(arr.flat(Infinity)); // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
728x90
반응형