> 웹 프론트엔드 > JS 튜토리얼 > JavaScript의 개체 속성을 기반으로 배열에서 개체를 효율적으로 제거하는 방법은 무엇입니까?

JavaScript의 개체 속성을 기반으로 배열에서 개체를 효율적으로 제거하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-02 20:36:30
원래의
368명이 탐색했습니다.

How to Efficiently Remove Objects from an Array Based on Object Property in JavaScript?

객체 속성을 기반으로 배열에서 객체 제거

JavaScript에서는 특정 속성을 일치시켜 배열에서 객체를 삭제하는 것이 어려울 수 있습니다. . 이는 일반적으로 시도되는 splice 방법을 사용하면 삭제가 발생함에 따라 배열 길이가 줄어들기 때문입니다.

Splice 방법 사용 시 수정사항

이 문제를 해결하려면, 삭제가 발생할 때 루프 인덱스를 감소시켜 수정 사항을 구현할 수 있습니다.

<code class="javascript">for (var i = 0; i < arrayOfObjects.length; i++) {
    var obj = arrayOfObjects[i];

    if (listToDelete.indexOf(obj.id) !== -1) {
        arrayOfObjects.splice(i, 1);
        i--;
    }
}
로그인 후 복사

배열 요소 덮어쓰기

또는 점진적으로 선형 시간 삭제를 방지할 수 있습니다. 유지하려는 배열 요소 덮어쓰기:

<code class="javascript">var end = 0;

for (var i = 0; i < arrayOfObjects.length; i++) {
    var obj = arrayOfObjects[i];

    if (listToDelete.indexOf(obj.id) === -1) {
        arrayOfObjects[end++] = obj;
    }
}

arrayOfObjects.length = end;
로그인 후 복사

조회용 해시 세트

효율적인 조회를 위해 해시 세트를 활용할 수 있습니다.

<code class="javascript">const setToDelete = new Set(listToDelete);
let end = 0;

for (let i = 0; i < arrayOfObjects.length; i++) {
    const obj = arrayOfObjects[i];

    if (setToDelete.has(obj.id)) {
        arrayOfObjects[end++] = obj;
    }
}

arrayOfObjects.length = end;
로그인 후 복사

도우미 함수

이 접근 방식을 도우미 함수로 캡슐화합니다.

<code class="javascript">const filterInPlace = (array, predicate) => {
    let end = 0;

    for (let i = 0; i < array.length; i++) {
        const obj = array[i];

        if (predicate(obj)) {
            array[end++] = obj;
        }
    }

    array.length = end;
};</code>
로그인 후 복사

위 내용은 JavaScript의 개체 속성을 기반으로 배열에서 개체를 효율적으로 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿