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

JavaScript에서 속성 값을 기준으로 배열 개체를 효율적으로 필터링하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-29 14:45:021075검색

How to Efficiently Filter Array Objects by Property Value in JavaScript?

속성 값으로 배열 객체 필터링

특정 속성을 기반으로 배열에서 객체를 효율적으로 제거하려면 다음 해결 방법을 고려하세요.

1. 내부 필터링:

배열 길이를 올바르게 줄이려면 항목을 제거한 후 i 감소를 구현하세요.

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

2. 요소 덮어쓰기:

선형 시간 삭제를 방지하기 위해 유지하려는 요소 덮어쓰기:

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

3. 해시 세트 최적화:

최신 런타임의 경우 해시 세트를 사용하여 조회 속도를 높입니다.

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

4. 재사용 가능한 함수(선택 사항):

재사용 가능한 함수로 필터링 작업을 래핑합니다.

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

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));
console.log(arrayOfObjects); // [{id: 'hij', name: 'ge'}]</code>

이러한 솔루션은 지정된 속성 값을 기반으로 배열에서 객체를 효율적으로 필터링하고 제거합니다.

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

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