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

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

Patricia Arquette
Patricia Arquette원래의
2024-11-01 12:41:021005검색

How to Efficiently Remove Objects from an Array Based on a Property Value?

객체 속성별로 배열에서 객체 제거

특정 속성을 기반으로 배열에서 객체를 제거하려면 기본 JavaScript 방법을 활용하고 연결 중 길이 감소로 인한 문제를 피하세요.

먼저 삭제할 개체를 결정하고 이를 listToDelete와 같은 변수에 저장합니다. 다음으로, 객체 배열(arrayOfObjects)을 반복하고 객체의 ID 속성이 listToDelete의 ID와 일치하는지 확인합니다. 일치하는 항목이 발견되면 splice를 사용하여 arrayOfObjects에서 객체를 제거합니다.

splice 작업 중에 길이가 줄어드는 문제를 해결하려면 객체가 제거될 때마다 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--;
  }
}
<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);
...
if (setToDelete.has(obj.id)) {...}

마지막으로 논리를 캡슐화합니다. 편리한 사용을 위해 재사용 가능한 함수:

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

이 접근 방식은 속성 값을 일치시켜 배열에서 객체를 효과적으로 제거하고 선형 시간 연산을 방지하여 최적의 성능을 보장합니다.

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

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