Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 두 2차원 배열이 같은지 확인하는 방법

```html

문제 소개

두 개의 2차원 배열을 인자로 받아, 두 배열이 서로 같은지 여부에 따라 불리언(true/false) 값을 반환하는 JavaScript 함수를 작성해 보겠습니다. 여기서 말하는 배열의 동등함은 대응되는 요소들이 모두 일치한다는 의미입니다.


배열이 같다고 판단되는 조건

두 배열이 같으려면 먼저 행과 열의 개수가 동일해야 합니다. 그리고 모든 i(0 ≤ i < 행의 개수)와 j(0 ≤ j < 열의 개수)에 대해 arr1[i][j] === arr2[i][j]가 성립해야 합니다.


예제 코드

const arr1 = [
  [1, 1, 1],
  [2, 2, 2],
  [3, 3, 3],
];
const arr2 = [
  [1, 1, 1],
  [2, 2, 2],
  [3, 3, 3],
];
const areEqual = (first, second) => {
  const { length: l1 } = first;
  const { length: l2 } = second;
  if (l1 !== l2) {
    return false;
  }
  for (let i = 0; i < l1; i++) {
    for (let j = 0; j < first[i].length; j++) {
      if (first[i][j] !== second[i][j]) {
        return false;
      }
    }
  }
  return true;
};
console.log(areEqual(arr1, arr2));

실행 결과

콘솔에는 다음과 같이 출력됩니다.

true

코드 설명

areEqual 함수는 구조 분해 할당으로 두 배열의 길이(행의 개수)를 꺼낸 뒤, 길이가 다르면 즉시 false를 반환합니다. 이후 중첩 for 루프를 돌며 같은 위치의 요소를 엄격 일치 연산자(===)로 비교하고, 하나라도 다르면 바로 false를 반환해 불필요한 순회를 줄입니다. 모든 요소가 일치하면 최종적으로 true를 반환합니다.


every()를 활용한 더 간결한 방법

Array.prototype.every() 메서드를 사용하면 같은 로직을 훨씬 선언적으로 표현할 수 있습니다.

const areEqual = (a, b) =>
  a.length === b.length &&
  a.every((row, i) =>
    row.length === b[i].length &&
    row.every((val, j) => val === b[i][j])
  );

이 방식은 각 행의 길이까지 함께 검사하기 때문에, 행마다 열 개수가 다른 비정형 배열(ragged array)도 안전하게 처리할 수 있다는 장점이 있습니다.