객체 속성을 기반으로 배열에서 객체 제거
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!