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

Barbara Streisand
풀어 주다: 2024-10-30 08:59:39
원래의
455명이 탐색했습니다.

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

기본 JavaScript를 사용하여 객체 속성별로 배열에서 객체 제거

객체 배열로 작업할 때 속성을 기반으로 특정 객체를 제거하는 것은 다음과 같습니다. 필수적인. 그러나 단순히 splice()를 사용하면 배열 길이가 줄어들어 복잡해질 수 있습니다. 기본 JavaScript 기술을 사용하여 이 문제를 극복하는 방법은 다음과 같습니다.

삭제 후 i 감소:

splice 관련 문제를 해결하려면 각 삭제 후 i를 감소시켜 이동된 인덱스. 이렇게 하면 배열 요소 건너뛰기를 방지하고 모든 대상 객체가 제거되도록 할 수 있습니다.

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

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

배열 요소 다시 쓰기:

선형 시간 삭제를 방지하려면 다음을 수행하세요. 배열에 유지하려는 요소만 다시 작성하세요.

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;
로그인 후 복사

해시 세트 사용:

빠른 조회를 위해 해시 세트를 사용하여 ID를 저장하세요. 삭제될 개체의 수입니다.

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;
로그인 후 복사

재사용 가능한 함수:

편의를 위해 이 논리를 재사용 가능한 함수로 래핑합니다.

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;
};

const toDelete = new Set(['abc', 'efg']);

const arrayOfObjects = [{id: 'abc', name: 'oh'},
                        {id: 'efg', name: 'em'},
                        {id: 'hij', name: 'ge'}];

filterInPlace(arrayOfObjects, obj => !toDelete.has(obj.id));
로그인 후 복사

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

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