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()를 사용하는 것이 일반적입니다.