개요
리터럴 값으로 구성된 배열을 인자로 받는 JavaScript 함수를 작성해야 합니다. 이 함수는 원본 배열에서 고유하지 않은 요소, 즉 중복된 값만 골라내어 새로운 배열을 만들어 반환해야 합니다.
예시
입력 배열이 다음과 같다고 가정해 보겠습니다.
const arr = [3, 6, 7, 5, 3];위 배열에서 숫자 3은 두 번 등장하므로 중복 요소입니다. 따라서 기대하는 출력 결과는 다음과 같습니다.
const output = [3];구현 코드
이 문제는 lastIndexOf() 메서드를 활용하면 간단하게 해결할 수 있습니다. 각 요소에 대해 현재 인덱스와 해당 값이 마지막으로 등장하는 인덱스를 비교하고, 두 값이 다를 때만 결과 배열에 추가하는 방식입니다.
const arr = [3, 6, 7, 5, 3];
const makeDuplicatesArray = (arr = []) => {
const res = [];
for(let i = 0; i < arr.length; i++){
if(i === arr.lastIndexOf(arr[i])){
continue;
};
res.push(arr[i])
};
return res;
};
console.log(makeDuplicatesArray(arr));실행 결과
코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
[3]동작 원리
코드의 동작 과정을 단계별로 살펴보면 다음과 같습니다.
- 배열을 처음부터 끝까지 순회하면서 각 요소를 하나씩 확인합니다.
arr.lastIndexOf(arr[i])는 현재 값이 배열 안에서 마지막으로 등장하는 위치를 반환합니다.- 현재 인덱스와 마지막 등장 인덱스가 일치하면, 그 값은 뒤에서 더 이상 반복되지 않는다는 뜻이므로 건너뜁니다(
continue). - 두 인덱스가 일치하지 않으면 같은 값이 뒤에 한 번 더 등장한다는 의미이므로, 현재 요소를 결과 배열에 추가합니다.
즉, 어떤 값이 여러 번 등장하더라도 마지막 등장 지점을 제외한 모든 위치에서 결과 배열에 담기게 됩니다. 위 예제에서 3은 두 번 등장하므로 첫 번째 위치에서만 추가되어 최종 결과는 [3]이 됩니다.