📌강의정리
n개의 문자열중에서 중복된 단어를 제거하고 내라는 문제이다.
앞에서 사용했던 indexOf를 써서 풀어보자.
s라는 배열은 문제에서 제공받은 문자열이다.
먼저 indexOf("time")을 해서 어떤 값이 반환되는지 알아보자.
answer=s.filter(); 를 하면 s라는 객체가 filter()라는 메소드를 호출했다.
filter는 원본배열을 바꾸는게 아닌 변환된 배열을 새로만든다.
filter(function(v,i){이 내부는 콜백함수의 내부이다.});
filter라는 메소드가 의미하는 것은 s라는 객체의 value를 하나씩 거치면서 콜백함수를 호출한다.
이제 if(s.indexOf(v)===i) 가 성립되면 return true; 를 하면 filter는 true인 값만 새로운 객체에 넣어주기 때문에 이제 답이 나오게 된다.
또한 그냥 return s.indexOf(v)===i 이면 참일때만 그 부위를 새로운 배열에다 요소로 넣는다.
📌느낀점
나는 그냥 배열에 push를 넣어서 풀었는데 강사님은 전에 배운 filter메서드를 써서 풀었다.
솔직히 내가 푼 방법이 더 간단해 보이기는 하는데
그래도 filter로 푸는 방법이랑 다른 메서드들 map,forEach,reduce도 실시간으로 알아내는 법을 구상해봐야겠다.
filter메서드의 true를 이용하는 방법에 익숙해질 필요가 있다.
//나의 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer=[];
for(let i=0;i<str.length;i++){
if(i===str.indexOf(s[i])) answer.push(s[i])
}
return answer;
}
let str=["good", "time", "good", "time", "time", "abc", "student"];
console.log(solution(str));
</script>
</body>
</html>
//강사님 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(s){
let answer;
//console.log(s.indexOf("time"));
answer=s.filter(function(v, i){
return s.indexOf(v)===i;
});
return answer;
}
let str=["good", "time", "good", "time", "student"];
console.log(solution(str));
</script>
</body>
</html>
'JS 알고리즘 문제풀이 > 섹션 1. 기본문제 풀이' 카테고리의 다른 글
16.중복문자제거(indexOf) (0) | 2022.01.12 |
---|---|
15.가운데 문자 출력(substring, substr) (0) | 2022.01.12 |
14.가장 긴 문자열 (0) | 2022.01.12 |
13.대소문자변환 (0) | 2022.01.12 |
12.대문자로 통일 (0) | 2022.01.12 |