TIL 07 | JavaScript 중간 시험 (getFind 함수)

dongwheekeem·2021년 9월 10일
0

TIL

목록 보기
7/23

오늘 JavaScript 중간 시험을 봤다..
이번주에 계속 westagram을 만들면서 html과 css만 해와서 JavaScript가 기억이 안 나서 걱정되었는데 그래도 무사히 시험을 마치고 실수했던 부분을 회고하려고 한다.


replit 문제

getFind 함수를 작성하세요.

문자와 문자열이 주어졌을때, getFind 함수는 주어진 문자열에서 주어진 문자가 나타나는 첫번째 위치를 반환합니다.

Notes: 문자열의 첫번째 문자는 인덱스 값 0 을 가집니다. 
만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다. 
만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.

중요!! indexOf 함수를 사용하지 마세요.

const output = getFind('a', 'I am a hacker')
console.log(output) // --> 2

<처음 작성했던 코드>

function getFind(filter, sentence) { 
  // 아래 코드를 작성해주세요.
  const sentenceArray = sentence.split("");
  const resultArray = [];

  for (let i = 0; i < sentence.length; i++) {
    
    if (filter != sentenceArray[i]) {
      return -1
    }
    if (filter = sentenceArray[i]) {
      const result = resultArray.push(i)
      return Math.min.apply(null, result)
    }
       
  }
  
}

// 아래의 코드는 절대로 수정하거나 삭제하지 마세요.
module.exports = {getFind}

<수정한 코드>

function getFind(filter, sentence) { 
  // 아래 코드를 작성해주세요.

  const sentenceArray = sentence.split("");
  
  for (let i = 0; i < sentence.length; i++) {
    
    if (filter === sentenceArray[i]) {

      return i
    }
   
  }
  return -1
      
}

// 아래의 코드는 절대로 수정하거나 삭제하지 마세요.
module.exports = {getFind}

해결한 방법

split을 활용하여 띄어쓰기를 포함한 모든 문자를 배열로 받아서 sentenceArray에 선언했고,
for문을 돌려 만약 filter(해당되는 문자)가 배열 내 같은 문자가 발견됐을 때 해당되는 index를 반환하고, 배열 끝까지 가서도 같은 게 없으면 -1이 반환될 수 있도록 return -1을 for문 밖에 위치시켰다.

(해결하면서 로직은 맞는데 계속 안 되었던 거를 찾아보니 if문에 조건에서 ===이 아닌 =으로 값으로 지정을 해놨더라.. 조심하자..^^)


더 간단한 해결 방법

search 활용 (sentence 내에서 filter와 부합되는 제일 첫번째 인덱스 반환하고, search는 자동으로 부합되는 게 없으면 -1을 반환한다.)

function getFind(filter, sentence) { 
  // 아래 코드를 작성해주세요.

  return sentence.search(filter)
    
}
profile
실패란 못하는 것이 아니라 하지 않았기 때문에 생긴 결과물이다

0개의 댓글