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

JavaScript로 배열 길이를 유지하며 중복 항목 제거하고 빈 문자열 채우기

이번 포스팅에서는 배열의 전체 길이는 그대로 유지하면서 중복된 요소를 모두 제거하고, 제거된 자리만큼 빈 문자열('')을 배열 끝에 채워 넣는 함수를 JavaScript로 작성하는 방법을 알아보겠습니다.

문제 정의

함수는 하나의 배열을 입력으로 받아 다음과 같이 동작해야 합니다.

  • 배열에서 중복된 값들을 모두 제거합니다.
  • 제거된 중복 값의 개수만큼 빈 문자열을 배열 끝에 추가하여 최종 길이가 원래 배열과 같도록 만듭니다.

예를 들어, 중복으로 인해 4개의 값이 제거되었다면, 해당 값들을 삭제한 후 배열 끝에 빈 문자열 4개를 이어 붙여야 합니다.

구현 예제

다음은 위 로직을 구현한 코드입니다.

const arr = [1,2,3,1,2,3,2,2,3,4,5,5,12,1,23,4,1];
const deleteAndInsert = arr => {
    const creds = arr.reduce((acc, val, ind, array) => {
        let { count, res } = acc;
        if(array.lastIndexOf(val) === ind){
            res.push(val);
        }else{
            count++;
        }
        return {res, count};
    }, {
        count: 0,
        res: []
    });
    const { res, count } = creds;
    return res.concat(" ".repeat(count).split(" "));
};
console.log(deleteAndInsert(arr));

코드 설명

  • reduce() 메서드: 배열을 순회하면서 각 요소가 마지막 등장 위치인지 확인합니다. lastIndexOf(val) === ind 조건은 해당 값이 현재 인덱스에서 마지막으로 나타난다는 의미이므로, 결과 배열 res에 값을 추가합니다.
  • count 증가: 조건에 해당하지 않는 경우(즉, 뒤에 동일한 값이 더 있는 경우)에는 중복으로 판단하여 count를 1씩 증가시킵니다.
  • 빈 문자열 생성: 최종적으로 " ".repeat(count).split(" ")를 통해 중복 개수만큼의 빈 문자열 배열을 만들고, concat()으로 결과 배열 뒤에 연결합니다.

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 출력이 나타납니다.

[
    2,  3,  5, 12, 23, 4,  1,
    '', '', '', '', '', '', '',
    '', '', '', ''
]

출력 결과를 보면 원본 배열의 고유한 값들(2, 3, 5, 12, 23, 4, 1)이 앞쪽에 배치되고, 제거된 중복 항목 수(10개)만큼의 빈 문자열이 뒤에 채워져 있어, 전체 배열 길이는 원본과 동일하게 유지됩니다.