2010-02-19 3 views
2

여기에 아주 간단한 페이지 매김 알고리즘이 있지만 원하는 방식으로 작동하지 않습니다. 그것은이페이지 매김 알고리즘이 올바르게 작동하지 않습니다.

1 2 3 ... 33 34 35 [36] 37 38 39 ... 48 49 50 

같이 표시해야하는 경우

현재 내가 아주 신속하게 쓴, 여기에 내 코드의이

1 2 3 ... 33 34 35 [36] 37 38 ... 47 48 49 50 

같이 표시합니다. 또한 계속 실행되는 것 같습니다 (루프가 멈추지 않습니다). 그러나 나는 이유를 모릅니다.

$(function(){ 
      var pages = 50;     //Total number of pages 
      var current = 36;    //The current page we are on 
      var before = 3;     //Number of links to display before current 
      var after = 3;     //Same as above but after 
      var start = (current - before); //The number of the first link 
      var end = (current + after); //Number of the end link 

      for(var i = 1; i <= pages; i++){ 
       if(i == (before + 1)){ 
        i = start; 
        document.write('...'); 
       } 
       else if(i == (current + after)){ 
        i = (pages - after); 
        document.write('...'); 
       } 
       if(i == current){ 
        document.write(' ['+i+'] '); 
       } 
       else{ 
        document.write(' '+i+' '); 
       } 
      } 
     }); 
+1

+1 이유는 이것이 -1이되어야하는 이유입니다. – Mizipzor

답변

1
  1. current + after 여기에 39 (36 + 3)은 테스트 할 수 있습니다, -

    또한, 나는 코드 (예 : 현재 == 2 곳) 에지 경우에 제대로 작동 확실하지 않다 "39"대신 "..."을 표시하는 데 이상이 없으며이 문제를 해결하기 위해 1을 더한 후 "

  2. 코드를보고 몇 분 후에 코드를 보았습니다. 콘솔에 "i"를 써서 어떤 값을 가져 왔는지 그리고 왜 그것이 "최종 값"에 도달하지 않는지 확인하려 했습니까?
2

당신이 그것을 사용하는 루프에있는 모든 장소에서 after 2 after + 1에 장소를 수정하십시오. 그래서 당신은 그

+0

사실 그는'(pages - (after +1) == 46') 변수를 변경할 수 없습니다. 두 번째 옵션은 올바른 코드 인'(pages-after + 1) == 48 '을 생성하기 때문에 더 좋습니다. –

0

배열은 대부분의 언어에서 0부터 시작하는 색인을 사용하는 이유가 있습니다. 수학은 단순합니다. 다음이 코드는 영원히 실행됩니다

else if(i == (current + after + 1)){ 
    i = (pages - after + 1); 
    document.write('...'); 
} 
2

(current + after) > (pages - after) 경우 (current + after) < pages : 귀하의 경우에, 당신은 분명 제로 인덱싱을 사용할 수 없기 때문에, 당신은 단지 오프별로 한 오류를 수정해야합니다 때문에의 :

else if(i == (current + after)){ 
    i = (pages - after); 
    document.write('...'); 
} 

icurrent + after에 도달 할 때마다, 그것은 pages - after로 감소되며, 그주기는

0

무기한 다음을 계속 알고리즘은 현재 페이지 약 5 페이지를 제공

예 :
- [X]는 현재 페이지
하다 -이 경우에는 총 페이지

<[1] 2 3 4 5> 
<1 [2] 3 4 5> 
<1 2 [3] 4 5>   
<2 3 [4] 5 6> 
... numbers in between ... 
<15 16 [17] 18 19> 
<16 17 [18] 19 20> 
<16 17 18 [19] 20> 
<16 17 18 19 [20]> 

경우 또는 전체 페이지에 20 미만이다 5, 3 개 ...
결과 등

<[1] 2 3> 

과 같이 말한다.

function (page, totalPages) { 
    var leftBoundry = Math.max(1, page - 2) 
    var rightBoundry = Math.min(totalPages, page + 2) 
    var arr = [] 
    var emptyRight = 2 - (rightBoundry - page) 
    var emptyLeft = 2 - (page - leftBoundry) 

    leftBoundry = Math.max(1, leftBoundry - emptyRight) 
    rightBoundry = Math.min(totalPages, rightBoundry + emptyLeft) 

    for (var i = leftBoundry; i <= rightBoundry; i++) { 
     arr.push(i) 
    } 

    return arr; 
} 

.

관련 문제