위코드 2주차의 마지막 날, javascript 중간 평가를 했다.
중간평가 3번까지는 무난하게 풀었지만 4번부터는 인터넷 검색이 없이는 풀지 못했다.
4번은 특히 indexOf를 쓰지 말고 풀라고 해서... 당황...
반복문과 조건문을 막 써봤는데 안나와서 메소드를 엄청 찾기 시작했다.
4번과 5번을 풀면서 느낀점은 내가 아직 string이나 array의 메소드를 잘 활용하지 못한다는 것이다.
2주 학습동안 부족하다고 느낀 논리구조력과 메소드 등 기본개념을 주말동안 보완할 예정이다.
getFind
함수 작성문제: getFind 함수를 작성하세요.
문자와 문자열이 주어졌을때, getFind 함수는 주어진 문자열에서 주어진 문자가 나타나는 첫번째 위치를 반환합니다.
Notes: 문자열의 첫번째 문자는 인덱스 값 0 을 가집니다. 만약 문자열에 해당 문자가 여러번 나타나면, 첫번째로 나타나는 위치를 반환해야 합니다. 만약 문자가 문자열에 존재하지 않는다면, -1 을 반환해야 합니다.
중요!! indexOf 함수를 사용하지 마세요.
// 원하는 결과값
const output = getFind('a', 'I am a hacker')
console.log(output) // --> 2
1) for 문과 str[i] 사용 > 실패
function getFind(filter, sentence) {
for(let i = 0; i < sentence.length; i++) {
if(filter === sentence[i]) {
return sentence[i].length
} else {
return -1
}
}
실패 이유)
1. string.length
의 결과값에 대한 개념 부족
sentence[i].length의 return값이 1이 나온다. 이 이유는 string의 정적속성이 string.length
를 1로 내보내기 때문이다.
2) 메소드로 해결
사용한 메소드
- str.includes(searchString [, position]) : 문자열 내에 찾고자 하는 다른 문자열이 있는지 확인할 수 있다.
- searchString : 이 문자열에서 찾을 다른 문자열
- [, position] : searchString을 찾기 시작할 위치(인덱스), 기본값 0
- 반환값: 문자열을 찾으면 true, 실패하면 false
=> 문제 해결: 값이 있는 지 확인
- str.search(regexp) : 정규 표현식과 이 string 객체간에 같은 것을 찾기 위한 검색 실행
- 반환값: 정규표현식과 주어진 스트링간에 첫번째로 매치되는 것의 인덱스를 반환한다. 찾지 못하면 -1를 반환한다.
=> 문자열의 위치(인덱스) 반환
function getFind(filter, sentence) {
// 해당 문장이 있는 지 확인는 메소드를 변수에 할당
let includedSentence = sentence.includes(filter);
// 조건문: 만약 변수의 값이 true라면(해당 문장이 있다면)
if(includeSentence === true) {
// 해당 문자가 있는 인덱스를 반환한다.
return sentence.search(filter);
} else {
return -1;
}
}
문제: find_longest_word 함수를 만들어 주세요.
주어진 리스트안에 있는 단어중 가장 긴 단어를 찾을수 있도록 함수를 완성해주세요.
//원하는 결과값
console.log(find_longest_word(["PHP", "Exercises", "Backend"]))
// --> "Exercises"
1) 반복문과 math.max를 사용해 단어중 가장 긴 값의 길이까지는 구현 성공
function find_longest_word(arr) {
for(let i = 0 ; i <arr.length ; i++) {
let longestWord = Math.max(arr.length)
}
}
console.log(find_longest_word(["PHP", "Exercises", "Backend"]))// return:8
문제 상황 직면: 가장 긴 문자의 길이는 구했는데..그 긴 문자를 반환하는데 어려움을 겪었다.
2) 반복문과 최대 길이를 구하는 내용을 변수에 선언하고, 긴 문자 반환은 arr.indexOf() 메소드를 사용하여 해결
사용한 메소드
- arr.map(callback(currentValue[, index[, array]])[, thisArg])
: 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환
- 매개변수
- callback: 새로운 배열 요소를 생성하는 함수. 다음 세 가지 인수를 가집니다.
- currentValue: 처리할 현재 요소
- index(Optional): 처리할 현재 요소의 인덱스
- array(Optional):
map()
을 호출할 배열- thisArg(Optional): callback을 실행할 때
this
로 사용되는 값.- 반환값: 배열의 각 요소에 대해 실행한 callback의 결과를 모은 새로운 배열
2.Math.max()함수
입력값으로 받은 0개 이상의 숫자 중 가장 큰 숫자를 반환console.log(Math.max(1,2,3)); // return 3 const array1 = [1,3,2] console.log(Math.max(...array1)) // return 3
- Array.indexOf(searchElement[,fromIndex])
: 배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환
- 매개변수
- searchElement: 배열에서 찾을 요소
- fromIndex(Optional) : 검색을 시작할 색인. 인덱스가 배열의 길이보다 크거나 같은 경우 -1이 반환
- 반환값: 배열 내의 요소의 최초의 인덱스. 발견되지 않으면 -1.
function find_longest_word(arr) {
//arrLength라는 변수에 배열의 길이를 담는다.
let arrLength = arr.map( x => x.length);
console.log(arrLength); //[3,9,7]
// 이 중 최대의 길이를 longestWord에 담는다.
let longestWord = Math.max(...arrLength);
console.log(longestWord); // 8
//arrlength 중에 최대의 길이를 가진 값의 인덱스를 foundLongestword에 담는다.
let foundLongestword = arrLength.indexOf(longestWord);
console.log(foundLongestword)
return arr[foundLongestword];
}