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

JavaScript 재귀 함수로 indexOf 구현하기 – 올바른 인덱스 값 반환 방법

JavaScript에서 배열의 indexOf 기능을 직접 만들고 싶다면, 재귀(recursion)를 활용한 사용자 정의 함수를 작성할 수 있습니다. 검색하려는 값이 배열에 존재하면 해당 요소의 인덱스를 반환하고, 존재하지 않으면 -1을 반환하도록 구현합니다.

구현 원리

재귀 방식의 핵심 로직은 다음과 같습니다.

  • 현재 인덱스가 배열 길이 이상이면 값을 찾지 못한 것이므로 -1을 반환합니다.
  • 현재 인덱스의 요소가 찾으려는 값과 일치하면 그 인덱스를 반환합니다.
  • 일치하지 않으면 인덱스를 1 증가시켜 자기 자신을 다시 호출합니다.

예제 코드

다음은 위 로직을 구현한 코드입니다.

const indexOf = (arrayValues, v, index = 0) =>
    index >= arrayValues.length
        ? -1
        : arrayValues[index] === v
            ? index
            : indexOf(arrayValues, v, index + 1)
console.log(indexOf(["John", "David", "Bob"], "Adam"))
console.log(indexOf(["Mike", "Adam", "Carol", "Sam"], "Sam"))

프로그램 실행 방법

위 프로그램을 실행하려면 터미널에서 다음 명령어를 입력하세요.

node fileName.js

여기서는 파일 이름이 demo321.js라고 가정합니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

PS C:\Users\Amit\javascript-code> node demo321.js
-1
3

첫 번째 예제에서는 "Adam"이 배열에 존재하지 않아 -1이 출력되었고, 두 번째 예제에서는 "Sam"이 인덱스 3 위치에 있어 3이 출력되었습니다.

정리

이처럼 삼항 연산자와 재귀 호출을 조합하면 내장 메서드 없이도 간결하게 indexOf와 동일한 동작을 하는 함수를 만들 수 있습니다. 다만 배열이 매우 클 경우 재귀 깊이 제한(스택 오버플로)에 유의해야 하며, 실무에서는 내장 Array.prototype.indexOf()를 사용하는 것이 일반적입니다.