오늘은 자바스크립트 퀴즈를 풀다가 작은 고난을 마주했다. 주어진 문자열에서 특정 문자의 위치를 찾아내 반환하는 문제였는데, 이런 조건이 붙어 있었다.
"indexOf 함수를 사용하지 마세요."
당연히 indexOf 함수로 해결하는 거 아닌가? 이 외의 방법은 도무지 떠오르지가 않아서 개발자의 동반자인 구글에게 물어보았다. 그러는 과정에서 search라는 새로운 개념을 알게 되었다.
둘은 비슷한 기능을 가지고 있다. 둘의 공통점을 먼저 알아보자면,
1.처음 검색된 값을 반환한다.
2.일치하는 값이 없으면 -1을 반환한다.
는 것이다. 그럼 뭐가 다를까?
i. search는 두 번째 혹은 다른 시작 위치를 인수로 지정할 수 없다. 반대로 indexOf는 가능하다.
예시)
Syntax for search(): string.search(value to search for)
Syntax for indexOf(): string.indexOf(value to search for, starting position)
NOTE: The 'Starting position' is an optional field.
ii. indexOf는 정규 표현식을 허용하지 않는다.
정규 표현식을 사용하는 검색이라면 search를 사용해야 한다. 결론은 정규식을 사용하려면 search를, 좀 더 빠르고 간단하게 이용하려면 indexOf를 쓰는 편이 낫다.
이 밑에서부터는 내가 search와 indexOf의 차이를 찾아 헤매게 만든 문제와 그 문제를 해결하기 위한 발버둥을 기록해두었다.
"get_find" 함수를 작성하세요. 문자와 문자열이 주어졌을때, "get_find" 함수는 주어진 문자열에서 주어진 문자가 나타나는 첫번째 위치를 반환합니다.
Notes: 문자열의 첫번째 문자는 인덱스 값 0 을 가집니다.
만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다. 만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다. indexOf 함수를 사용하지 마세요.
const output = get_find('a', 'I am a hacker')
console.log(output) // --> 2
function get_find() {
const arr = ['a', 'I am a hacker'];
let output = arr.search(arr[0])
console.log(arr.search(output));
}
get_find();
console.log(output);
function get_find() {
const arr = ['a', 'I am a hacker'];
let output = arr[0];
let output2=arr.search(output)
if(output2!=-1)
return output2;
}
get_find();