오늘 알고리즘 풀이 중 만난
반드시 기억할 새로 알게된 함수
인덱스 관련 함수 두가지
문제 설명
String형 배열 seoul의 element중 "Kim"의 위치 x를 찾아, "김서방은 x에 있다"는 String을 반환하는 함수, solution을 완성하세요. seoul에 "Kim"은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.
제한 사항
seoul은 길이 1 이상, 1000 이하인 배열입니다.
seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
"Kim"은 반드시 seoul 안에 포함되어 있습니다.
입출력 예
seoul : ["Jane", "Kim"]
return : "김서방은 1에 있다"
나는 배열에서 반복문을 사용하여 돌아가며 찾는 코드를 제출했다.
function solution(seoul) {
var answer = '';
for (let i = 0; i < seoul.length; i++) {
if (seoul[i] === "Kim") answer = `김서방은 ${i}에 있다`
}
return answer;
}
그리고 다른 사람의 풀이에서 인덱스 찾는 함수들을 발견
function solution(seoul) {
return "김서방은 " + seoul.indexOf('Kim') + "에 있다";
}
indexOf 함수는, 문자열(string)에서 특정 문자열(searchvalue)을 찾고,
검색된 문자열이 '첫번째'로 나타나는 위치 index를 리턴한다.
string.indexOf(searchvalue[, position])
indexOf를 사용한 것도 간결하고 보기 좋았는데
최근에 더욱 추천되는 방식이 하나 더 있었다.
const solution = (seoul) =>
`김서방은 ${arr.findIndex(s => s === 'Kim')}에 있다`;
출력값은 같지만 ES6에 findIndex()가 새롭게 추가되어
현대적이고 선언적인 코드로 더 선호되고 있다고 한다.
findIndex(testFn(element[, index[, array]])[, thisArg])
메서드의 기본구문은 조금 복잡해보이지만 사용하기 편리하다.
testFn
testFn은 요소가 발견되었음을 나타내는 true를 반환할 때까지 배열의 각 요소에 대해 실행하는 함수
testFn은 세 가지 인수를 사용
element는 처리 중인 배열의 현재 요소
index는 처리 중인 현재 요소의 인덱스
배열은 findIndex()가 호출된 배열
thisArg
: thisArg는 콜백을 실행할 때 사용할 선택적 객체
thisArg 인수를 생략하면 findIndex() 함수는 undefined를 사용
: findIndex()는 testFn이 true로 강제 변환되는 값인 truthy 값을 반환하는 항목을 찾을 때까지 배열의 모든 요소에 대해 testFn을 실행
: findIndex()가 그러한 요소를 찾으면 즉시 요소의 인덱스를 반환
함수사용에 조금 더 익숙해지면 화살표 함수도 많이 써봐야겠군