- getFind함수에 인자를 두개 전달(찾고싶은문자, 문자열)
- indexOf를 사용하지 않고 인덱스값을 이용하려면 for문을 사용.
- 값이 들어가 빈배열 선언
- for문 안에 if문을 사용하고 조건이 참일 때 return되는 값은 빈배열로 push
- 조건에 맞는 값이 여러번 빈 배열에 쌓이게 되지만 첫번째로 쌓인 값을 반환하는게 목표
- 빈 배열 첫번째 값 return
function getFind(filter, sentence) { let result = [] for (let i = 0; i < sentence.length; i++) { if (sentence[i] == filter) { result.push(i); }else{ result.push(-1); } return result[0] } const output = getFind('a', 'I am hacker') console.log(output) // for문이 다 돌아가면 result에 값이 이렇게 쌓인다. //result = [-1, -1, 2, -1, -1, -1, 6, -1, -1, -1, -1]
- for문을 하나만 써서 이렇게 됨을 인지
- for문을 두개 써보기로 함.
- 그렇다면 참일때 조건을 가진 for문을 먼저 실행하고 거짓일때 조건을 가진 for문을 그다음으로 작성해보자.
- 참이면 해당하는 값이 먼저 빈 배열에 쌓일 수 있겠지?
- 거짓이면 첫번째 for문을 지나가고 거짓 값이 쌓이겠지?
function getFind(filter, sentence) { let result = [] for (let i = 0; i < sentence.length; i++) { if (sentence[i] == filter) { result.push(i); } } for (let i = 0; i < sentence.length; i++) { if (sentence[i] !== filter) { result.push(-1); } } console.log(result) return result[0] } const output = getFind('a', 'I am hacker') console.log(output) // [2, 6, -1, -1, -1, -1, -1, -1, -1, -1, -1] // 참일때 값이 먼저 쌓인다. // 2 // result[0] = 2
i am hacker라는 문자열에 첫번째 a의 인덱스는 2이기 때문에 빈 배열에 0번째 부터 잘 쌓여서 return 되고 있음을 확인했다.