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