>웹 프론트엔드 >JS 튜토리얼 >JavaScript 배열에서 중복 값을 제거하는 방법은 무엇입니까?

JavaScript 배열에서 중복 값을 제거하는 방법은 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-19 19:03:101006검색

How to Remove Duplicate Values from a JavaScript Array?

JS 배열에서 중복 값 제거

JavaScript 배열로 작업할 때 중복 값을 제거해야 하는 경우가 많습니다. 원래 배열을 변경하지 않고 이를 달성하기 위해 여러 접근 방식을 사용할 수 있습니다.

집합 생성자와 확산 구문 사용>

가장 간단한 방법은 집합을 활용하는 것입니다. 생성자 및 스프레드 구문:

const uniq = [...new Set(array)];

이렇게 하면 배열에서 새 Set이 생성되어 자동으로 중복 항목이 제거됩니다. 그런 다음 스프레드 구문은 Set을 다시 배열로 변환합니다.

고유 요소 필터링

또 다른 옵션은 indexOf 메서드를 기반으로 배열을 필터링하는 것입니다.

const uniqueArray = a.filter(function(item, pos) {
    return a.indexOf(item) == pos;
});

이 메서드는 배열을 반복하고 각 요소의 첫 번째 발생이 해당 위치와 일치하는지 확인합니다. 고유한 요소만 이 조건을 충족합니다.

객체를 사용한 해싱

효율성을 위해 객체를 사용한 해싱을 사용할 수 있습니다.

function uniq(a) {
    const seen = {};
    return a.filter(function(item) {
        return seen.hasOwnProperty(item) ? false : (seen[item] = true);
    });
}

이 접근 방식은 해시 테이블을 유지하여 중복 값을 빠르게 확인하여 선형 시간을 보장합니다.

정렬 및 필터링

입력 배열이 정렬된 경우 이를 정렬한 다음 연속된 동일한 요소를 필터링하여 중복 항목을 제거할 수 있습니다.

function uniq(a) {
    return a.sort().filter(function(item, pos, ary) {
        return !pos || item != ary[pos - 1];
    });
}

맞춤형 고유화 기준

특정 기준에 따라 중복 항목을 필터링하려면 콜백 기능을 사용할 수 있습니다.

function uniqBy(a, key) {
    const seen = {};
    return a.filter(function(item) {
        const k = key(item);
        return seen.hasOwnProperty(k) ? false : (seen[k] = true);
    });
}

키 콜백을 사용하면 사용자 정의 비교가 가능하고 더 복잡한 기준에 따라 중복 항목을 제거할 수 있습니다. logic.

첫 번째 또는 마지막 보존 발생

특정 시나리오에서는 중복 요소의 첫 번째 또는 마지막 발생을 보존하는 것이 바람직할 수 있습니다.

function uniqByKeepFirst(a, key) {
    const seen = new Set();
    return a.filter(item => {
        const k = key(item);
        return seen.has(k) ? false : seen.add(k);
    });
}

function uniqByKeepLast(a, key) {
    return [
        ...new Map(
            a.map(x => [key(x), x])
        ).values()
    ]
}

uniqByKeepFirst 함수는 Set을 활용하여 고유 키를 유지합니다. uniqByKeepLast는 Map을 사용하여 각 키와 관련하여 마지막으로 발견된 값을 보존합니다.

위 내용은 JavaScript 배열에서 중복 값을 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.