编程,很主要的一个妙技就是笼统才能,就是实际中的杂事,我怎样用代码来示意。
一、简朴的分页需求
当前页码前后显现3页,然后须要显现第一页以及末了一页
未显现的页码用省略号’…’示意
举例以下:
当前页码为
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
二、思绪剖析
不斟酌超链接,我们能够将需求笼统出来。能够将这个需求简朴成一个字符输出题目
请求:
输入两个参数,当前页数
page
以及总页数total
输出相符上述请求的字符串
能够斟酌先定义一个函数showPage
function showPage(page, total){
}
历程:
起首,我们来处理最广泛的需求:页数摆布各增加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);
}
}
}
再来处理左侧是不是增加
...
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;
}
彷佛遗漏了什么。。。哦,我想起来了,我们遗忘增加第一页跟末了一页了!
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);
}