Problem
- Your task is to remove all duplicate words from a string, leaving only single (first) words entries.
- 문자열의 모든 중복 단어를 제거하고, 하나의 (첫 번째) 단어만 남긴다.
Solution 01
function removeDuplicate(str) {
str = str.split(' ');
let result = [];
for (let i = 0; i < str.length; i++) {
if (!result.includes(str[i])) {
result.push(str[i]);
}
}
return result.join(' ');
}
removeDuplicate('one two two'); // one two
removeDuplicate('a b b c c d'); // a b c d
split()
: 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.
includes()
: 특정 값이 있는지 확인하고, true/false를 반환한다.
push()
: 배열의 끝에 새 element를 추가하고, 새로운 길이를 반환한다.
join()
: 배열의 모든 element를 결합하고, 새 문자열로 반환한다.
Solution 02
function removeDuplicate(str) {
let result = [];
str.split(' ').forEach(i => {
if (!result.includes(i)) {
result.push(i);
}
});
return result.join(' ');
}
removeDuplicate('one two two'); // one two
removeDuplicate('a b b c c d'); // a b c d
forEach()
: 배열의 각 element에 대해, 제공된 함수를 차례로 한 번씩 호출한다.
Solution 03
function removeDuplicate(str) {
let result = [];
str.split(' ').map(i => {
if (!result.includes(i)) {
result.push(i);
}
});
return result.join(' ');
}
removeDuplicate('one two two'); // one two
removeDuplicate('a b b c c d'); // a b c d
map()
: 배열 내 모든 element에 대해, 호출한 함수의 결과를 모아 새 배열로 반환한다.
Solution 04
function removeDuplicate(str) {
return str.split(' ').filter((i, index, arr) => arr.indexOf(i) === index).join(' ');
}
removeDuplicate('one two two'); // one two
removeDuplicate('a b b c c d'); // a b c d
filter()
: 테스트를 통과한 배열의 각 값을 모아, 새 배열로 반환한다.
indexOf()
: 주어진 값이 처음으로 나타나는 위치를 반환한다. 일치하는 값이 없으면 -1을 반환한다.