루프 내의 배열에서 항목을 제거할 때 splice()가 후속 요소를 렌더링하는 문제가 발생할 수 있습니다. 접근할 수 없습니다. 이는 splice()가 배열을 다시 색인화하여 항목을 건너뛸 가능성이 있기 때문입니다.
문제:
다음 예에서는 "초"를 감소시킨 다음 다음을 기준으로 항목을 접합합니다. 음수 값은 정의되지 않음을 유발합니다. 오류:
for (i = 0, len = Auction.auctions.length; i < len; i++) { auction = Auction.auctions[i]; Auction.auctions[i]['seconds'] --; if (auction.seconds < 0) { Auction.auctions.splice(i, 1); } }
해결책:
이 문제를 해결하려면 두 가지 접근 방식을 고려하십시오.
감소 Splice() 이후의 인덱스: splice()로 항목을 제거한 후 감소 재인덱싱을 조정하기 위한 "i":
for (i = 0, len = Auction.auctions.length; i < len; i++) { auction = Auction.auctions[i]; Auction.auctions[i]['seconds'] --; if (auction.seconds < 0) { Auction.auctions.splice(i, 1); i--; } }
역방향 반복: 마지막 인덱스로 루프를 시작하고 역방향 반복:
var i = Auction.auctions.length while (i--) { ... if (...) { Auction.auctions.splice(i, 1); } }
이렇게 하면 재인덱싱은 후속 요소에만 영향을 미치므로 지속적인 요소 생성이 가능합니다. 루프.
위 내용은 JavaScript에서 반복하는 동안 배열에서 항목을 안전하게 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!