[JavaScript] 두 집 살림 하는 .indexOf()에 관하여

핫걸코더지망생·2023년 5월 10일
0

JavaScript

목록 보기
1/6
post-thumbnail

오늘 코테 풀다 '부분 문자열인지 확인하기' 라는 문제를 만났다.
https://school.programmers.co.kr/learn/courses/30/lessons/181843

문제 설명
부분 문자열이란 문자열에서 연속된 일부분에 해당하는 문자열을 의미합니다.
예를 들어, 문자열 "ana", "ban", "anana", "banana", "n"는 모두 문자열 "banana"의 부분 문자열이지만, "aaa", "bnana", "wxyz"는 모두 "banana"의 부분 문자열이 아닙니다.
문자열 my_string과 target이 매개변수로 주어질 때, target이 문자열 my_string의 부분 문자열이라면 1을, 아니라면 0을 return 하는 solution 함수를 작성해 주세요.


📌문자열이 특정 문자열을 포함하는지 확인하는 방법으로 어떤 메서드가 있는지 궁금하여 검색해 보았다.

  1. .includes() (ECMAScript 6이상 지원)
    MDN : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes

  2. .indexOf()
    MDN : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf



📌 이번에 문제를 풀며 알게된 Includes()를 사용하여 문제를 풀어 보았다.

function solution(my_string, target) {
    let answer = my_string.includes(target);    
    return (answer === true)? 1 : 0 
}

회고조 코드리뷰 시간에 풀이를 하며 includes() 대신 indexOf()를 사용하여 풀면 오류가 난다고 하니 조원분께서 피드백으로 🙎‍♂️ : indexOf가 배열에서 사용하는 매서드 아니냐? 문자열도 사용할 수 있냐? 라는 질문이 나왔다.

📌그래서 MDN을 찾아보니 둘 다 사용 가능하다.

  1. Array.prototype.indexOf()
    ->indexOf() 메서드는 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환합니다.

    MDN : https://developer.mozilla.org/enUS/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

  2. String.prototype.indexOf()
    ->indexOf() 메서드는 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환합니다. 일치하는 값이 없으면 -1을 반환합니다.

    MDN : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf



📌 위 내용을 참고하여 indexOf를 사용해서도 문제를 풀어 보자

function solution(my_string, target) {
    return my_string.indexOf(target) === -1 ? 0 : 1
}


indexOf() 와 includes()는 반환값이 다르다 그래서 참, 거짓으로 값을 반환하는 삼항연산자에 들어가는 값도 다르게 설정해 줬어야 했다.

  • indexOf() 는 찾을 값이 없다면 -1을 반환
  • includes() 는 true , false 로 값을 반환
profile
산은 산, 물은 물, 코드는 코드

0개의 댓글