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

JavaScript 2차원 배열에서 특정 배열의 인덱스 위치 찾기

문제 상황

다음과 같이 배열 안에 여러 개의 배열이 들어 있는 2차원 배열이 있다고 가정해 보겠습니다.

const arr = [
  [1,0],
  [0,1],
  [0,0]
];

우리는 첫 번째 인수로 이러한 2차원 배열을 받고, 두 번째 인수로 정확히 두 개의 숫자로 이루어진 배열을 받는 JavaScript 함수를 작성해야 합니다.

이 함수의 역할은 두 번째 입력으로 주어진 배열이 원본 배열 안에 존재하는지 여부를 확인하는 것입니다. 만약 존재한다면 해당 하위 배열의 인덱스를 반환하고, 존재하지 않는다면 -1을 반환하도록 구현할 수 있습니다.

핵심 아이디어

JavaScript에서 배열은 참조(reference) 타입이기 때문에 ===== 연산자로 단순 비교하면 내용이 같아도 참조가 다르면 항상 false가 반환됩니다. 따라서 각 요소를 하나씩 직접 비교하는 방식으로 두 배열이 동일한지 판단해야 합니다.

예제 코드

const arr = [ [1,0], [0,1], [0,0] ];
const sub = [0, 0];
const matchEvery = (arr, ind, sub) => arr[ind].every((el, i) => el == sub[i]);
const searchForArray = (arr = [], sub = []) => {
   let ind = -1;
   let { length: len } = arr;
   while (len--) {
      if (arr[len].length === sub.length && matchEvery(arr, len, sub)){
         ind = len;
         break;
      };
   };
   return ind;
};
console.log(searchForArray(arr, sub));

코드 설명

  • matchEvery: 특정 인덱스에 있는 내부 배열과 검색 대상 배열(sub)을 요소별로 비교합니다. every() 메서드를 사용하여 모든 요소가 일치하는지 확인합니다.
  • searchForArray: 바깥 배열을 뒤에서부터 앞으로 순회하면서, 길이가 같고 모든 요소가 일치하는 하위 배열을 발견하면 해당 인덱스를 저장하고 반복을 종료합니다.
  • 일치하는 배열을 찾지 못하면 초기값인 -1을 그대로 반환합니다.

출력 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

2

검색한 배열 [0, 0]은 원본 배열 arr의 인덱스 2 위치에 존재하므로 결과값으로 2가 출력됩니다. 만약 존재하지 않는 배열을 검색했다면 -1이 출력되었을 것입니다.