简朴的分页

原文链接

编程,很主要的一个妙技就是笼统才能,就是实际中的杂事,我怎样用代码来示意。

一、简朴的分页需求

  1. 当前页码前后显现3页,然后须要显现第一页以及末了一页

  2. 未显现的页码用省略号’…’示意

举例以下:

  • 当前页码为1,那末显现1 2 3 4 ... 110 下一页

  • 当前页码为2,那末显现上一页 1 2 3 4 5 ... 110 下一页

  • 当前页码为3,那末显现上一页 1 2 3 4 5 6 ... 110 下一页

  • 当前页码为4,那末显现上一页 1 2 3 4 5 6 7 ... 110 下一页

  • 当前页码为5,那末显现上一页 1 2 3 4 5 6 7 8 ... 110 下一页

  • 当前页码为6,那末显现上一页 1 ... 3 4 5 6 7 8 9 ... 110 下一页

  • 当前页码为100,那末显现上一页 1 ... 97 98 99 100 101 102 103 ... 110 下一页

  • 当前页码为109,那末显现上一页 1 ... 106 107 108 109 110 下一页

  • 当前页码为110,那末显现上一页 1 ... 106 107 108 109 110

二、思绪剖析

不斟酌超链接,我们能够将需求笼统出来。能够将这个需求简朴成一个字符输出题目

请求:

  1. 输入两个参数,当前页数page以及总页数total

  2. 输出相符上述请求的字符串

能够斟酌先定义一个函数showPage

function showPage(page, total){

}

历程:

  1. 起首,我们来处理最广泛的需求:页数摆布各增加3个页码

function showPage(page, total){
  var str = page; //起首纪录传入的页码数字

  for(var i = 1; i <= 3; i++){

    if(page - i > 1){ //推断所传页码之前增加的页码数
      str = page - i + ' ' + str;
    }

    if(page + i < total){ //推断所传页码以后增加的页码数
      str = str + ' ' + (page+i);
    }
  }
}
  1. 再来处理左侧是不是增加...

function showPage(page, total){
  var str = page; //起首纪录传入的页码数字

  for(var i = 1; i <= 3; i++){

    if(page - i > 1){ //推断所传页码之前增加的页码数
      str = page - i + ' ' + str;
    }

    if(page + i < total){ //推断所传页码以后增加的页码数
      str = str + ' ' + (page+i);
    }
  }

  if(page - 3 > 1){ //推断页码左侧是不是增加'...'
    str = '... ' + str;
  }

  if(page + 3 < total){
    str = str + '... ';
  }

  return str;
}
  1. 彷佛遗漏了什么。。。哦,我想起来了,我们遗忘增加第一页跟末了一页了!

function showPage(page, total){
  var str = page; //起首纪录传入的页码数字

  for(var i = 1; i <= 3; i++){

    if(page - i > 1){ //推断所传页码之前增加的页码数
      str = page - i + ' ' + str;
    }

    if(page + i < total){ //推断所传页码以后增加的页码数
      str = str + ' ' + (page+i);
    }
  }

  if(page - 3 > 1){ //推断页码左侧是不是增加'...'
    str = '... ' + str;
  }

  if(page > 1) {
    str = '上一页 ' + '1 ' + str;
  }

  if(page + 3 < total){
    str = str + '...';
  }

  if(page < total){
    str = str + ' ' + total + ' 下一页';
  }

  return str;
}

咦,看上去好了。但总觉得瑕玷什么~~~

三、测试用例

哦,想起来了,我们遗忘写测试用例了。那我们来一个简朴粗犷的吧~

var total = 110;
for(var i = 1; i <= total; i++){
  var ret = showPage(i, total);
  console.log(ret);
}
    原文作者:望舒
    原文地址: https://segmentfault.com/a/1190000007956615
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞