Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript에서 배열의 중복 값만 추출해 새 배열 만들기

개요

리터럴 값으로 구성된 배열을 인자로 받는 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]이 됩니다.