JavaScript 프로그래밍을 하다 보면 문자열 배열 안에서 특정 문자로 시작하는 요소를 찾아야 하는 경우가 자주 있습니다. 예를 들어 이름 목록에서 'K'로 시작하는 이름이 처음 등장하는 위치를 알고 싶다면 어떻게 해야 할까요?
이번 글에서는 문자열 배열과 한 개의 문자를 인자로 받아, 해당 문자로 시작하는 첫 번째 배열 요소의 인덱스를 반환하는 함수를 작성하는 방법을 알아보겠습니다.
문제 정의
요구 사항은 다음과 같습니다.
- 첫 번째 인자: 문자열 리터럴로 이루어진 배열
- 두 번째 인자: 검색할 단일 문자
- 배열을 순회하며 해당 문자로 시작하는 첫 번째 요소의 인덱스를 반환
- 조건에 맞는 요소가 없으면
-1을 반환
구현 코드
반복문을 사용해 간단하게 구현할 수 있습니다.
const names = ['Naman', 'Kartik', 'Anmol', 'Rajat', 'Keshav', 'Harsh', 'Suresh', 'Rahul'];
const firstIndexOf = (arr = [], char = '') => {
for(let i = 0; i < arr.length; i++){
const el = arr[i];
if(el.substring(0, 1) === char){
return i;
};
};
return -1;
};
console.log(firstIndexOf(names, 'K'));
console.log(firstIndexOf(names, 'R'));
console.log(firstIndexOf(names, 'J'));코드 설명
함수가 동작하는 방식은 다음과 같습니다.
for반복문으로 배열의 처음부터 끝까지 순회합니다.- 각 요소에 대해
substring(0, 1)을 사용해 첫 글자만 추출합니다. - 추출한 글자가 두 번째 인자로 전달된 문자와 일치하면 해당 인덱스를 즉시 반환합니다.
- 끝까지 순회했는데도 일치하는 요소가 없다면
-1을 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
1 3 -1
'K'로 시작하는 'Kartik'은 인덱스 1에 있으므로 1, 'R'로 시작하는 'Rajat'은 인덱스 3에 있으므로 3, 그리고 'J'로 시작하는 이름은 없으므로 -1이 출력됩니다.
대안: findIndex 활용하기
모던 JavaScript에서는 findIndex() 메서드를 사용하면 더 간결하게 표현할 수 있습니다.
const firstIndexOf = (arr = [], char = '') =>
arr.findIndex(el => el.startsWith(char));startsWith() 메서드는 문자열이 특정 문자나 문자열로 시작하는지 확인하며, substring(0, 1) 비교보다 의도가 더 명확하게 드러납니다. 조건에 맞는 요소가 없으면 findIndex() 역시 -1을 반환하므로 기존 함수와 동일한 결과를 얻을 수 있습니다.