> 웹 프론트엔드 > JS 튜토리얼 > JS 역순 순회 구현 code_javascript 기술

JS 역순 순회 구현 code_javascript 기술

WBOY
풀어 주다: 2016-05-16 16:29:35
원래의
1691명이 탐색했습니다.

가장 일반적으로 사용되는 순회 방법은 for 문입니다(재귀 및 while 방법도 있음). 배열을 반복할 때 일반적으로 다음을 수행합니다.

코드 복사 코드는 다음과 같습니다.

var arr = [1,2,3,4,5,6,7,8,9,10];
for(var i=0,total=arr.length;i console.log(i,arr[i]);
}

가장 일반적으로 사용되는 순회 방법은 순방향 순회입니다. 배열의 첫 번째 항목에서 마지막 항목으로 이동합니다.

그렇다면 오늘 드라마에서는 왜 역순순회도 언급되는 걸까요?

여기서는 작은 드라마의 구성 요소 중 가장 많이 사용되는 모듈 중 하나인 이벤트를 언급해야 합니다. 사용자 정의 이벤트 모델을 생성하고, 가장 간단한 게시 및 구독(pub/sub) 모드인 이벤트 모니터링 및 트리거링을 처리하는 데 사용됩니다. 최근 메모리 오버플로의 숨겨진 위험이 있다는 사실이 밝혀졌기 때문에, 기본적으로 언바인딩 방법을 추가할 필요가 있습니다.

동일한 이벤트 이름의 콜백 함수가 동일한 배열에 배치되어 있기 때문에 바인딩을 해제하려면 해당 배열에서 해당 콜백 함수를 찾아서(동일한 콜백 함수가 여러 번 바인딩될 수 있음) 제거하면 됩니다.

매우 간단한 요구사항이므로 다음과 유사한 코드를 작성하는 것이 당연합니다.

코드 복사 코드는 다음과 같습니다.

//배열에서 2
제거 var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i if(arr[i] == 2){
//조건 충족, 삭제
arr.splice(i,1);
}
}
console.log(arr);

정상적인 코드가 있는지, 최종 출력 결과는 [1, 2, 2, 1, 1, 2]입니다. 확실히 실행 결과는 예상과 다릅니다.

무엇이 문제인가요?

신중하게 분석한 결과, 일치가 성공할 때마다 제거 작업이 수행된 후 배열의 각 후속 항목이 하나씩 앞으로 이동하기 때문에 확인할 다음 항목을 건너뛰는 것이 문제라는 것을 발견했습니다. .

제거 작업을 수행한 후 문제를 발견하고 코드를 변경하고 시퀀스 인덱스 인덱스(i)를 조정했습니다.

코드 복사 코드는 다음과 같습니다.

//배열에서 2
제거 var arr = [1,2,2,2,2,1,1,2,2];
for(var i=0,total=arr.length;i if(arr[i] == 2){
//조건 충족, 삭제
arr.splice(i,1);
//시퀀스 인덱스 조정
나는 = 나는-1;
}
}
console.log(arr);

문제는 해결되었지만 여전히 시퀀스 인덱스를 수정하는 것은 for 루프의 문제라고 생각합니다. 그러던 중 번쩍이는 영감이 떠올라 뱅뱅뱅 다음 코드를 입력했습니다.

코드 복사 코드는 다음과 같습니다.

//배열에서 2
제거 var arr = [1,2,2,2,2,1,1,2,2];
for(var i = arr.length-1;i!=-1;i--){
if(arr[i] == 2){
//조건 충족, 삭제
arr.splice(i,1);
}
}
console.log(arr);

순회 프로세스는 변경되지 않고 그대로 유지됩니다. 유일한 변경 사항은 순회 순서가 변경되었다는 것입니다. 그런데 가변 합계가 하나 적습니다.

오늘 제가 쓴 내용이 매우 어리석다는 점은 인정하지만, 이 예를 통해 앞으로 코드를 작성할 때 순회 과정에서 배열 자체를 수정(추가 및 삭제)하는 경우를 상기시켜 드리겠습니다. 역방향 탐색은 비교하는 안전한 탐색 방법입니다.

코딩 노트, 나중에 웃을 수 있게 남겨두세요!

전재시 출처를 밝혀주세요: http://bh-lay.com/blog/148c07761fa

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿