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

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

Linda Hamilton
Linda Hamilton원래의
2024-11-02 20:36:30365검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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