>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 for 루프에서 배열 요소의 내용을 삭제할 때 발생하는 문제

JavaScript의 for 루프에서 배열 요소의 내용을 삭제할 때 발생하는 문제

高洛峰
高洛峰원래의
2016-12-06 13:13:211385검색

어제 for 루프를 사용하여 배열 중복을 제거할 때 발생한 문제

먼저 이중 for 루프를 사용하여 이전 요소와 모든 후속 요소를 비교하고 동일하면 삭제합니다.

그러나 배열에 동일한 요소가 3개 이상 연속으로 있으면 문제가 발생합니다.

var arr = [1,1,1,2,2];
for(var i=0; i<arr.length-1; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i] === arr[j]){
arr.splice(j,1);
}
}
}
document.write("arr:"+arr);

출력:

JavaScript의 for 루프에서 배열 요소의 내용을 삭제할 때 발생하는 문제

이것은 배열에서 요소가 삭제될 때, 배열 길이가 1만큼 줄어들면 후속 요소는 한 위치 앞으로 이동하고 인덱스도 1만큼 줄어들지만 j는 여전히 j++의 연산을 수행합니다.

즉, 처음 삭제 시 i=0 j=1, 삭제 후 arr=[1,1,2,2], j=2, 삭제 후 j=1이 됩니다. 요소는 계속해서 순회됩니다.

따라서 삭제할 때마다 j에서 1을 뺍니다.

var arr = [1,1,1,2,2];
for(var i=0; i<arr.length-1; i++){
for(var j=i+1; j<arr.length; j++){
if(arr[i] == arr[j]){
arr.splice(j--,1);
}
}
}
document.write("arr:"+arr);

출력:

JavaScript의 for 루프에서 배열 요소의 내용을 삭제할 때 발생하는 문제

배열 요소를 삭제하는 것과 마찬가지로 배열의 길이가 1씩 줄어들고 그 이후의 요소는 한 자리 앞으로 이동한다는 점을 고려해야 합니다.


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