我想使用以下格式进行分页:1, 2, 3, ..., latest three
。
这是我的代码:
let skip = null;
if(pageCount > 10){
skip = <li><span>...</span></li>
}
for(let i = 1; i <= pageCount; i++) {
if((i < page + 3 && i > page - 3)){
result.push(
<li key={i}>some link</li>
);
continue;
} else if(skip){
result.push(skip);
skip = null;
}
}
我有pageCount
(对于示例20)和page
(对于当前页面的编号),对于示例-3
。
我尝试了很多事情,但仍然不知道该怎么做。
我要尝试的格式是
如果page=10
,pageCount=20
:
8, 9, 10, ..., 18, 19, 20
。
如果page=1
:
1, 2, 3, ..., 18, 19, 20
。
如果page=20
:
1, 2, 3, ..., 18, 19, 20
。
答案 0 :(得分:1)
您已接近解决方案。
也许这会对您有所帮助
function smartPagination(current, last){
var delta = 2,
left = current - delta,
right = current + delta + 1,
range = [],
rangeWithDots = [],
l;
for (let i = 1; i <= last; i++) if (i == 1 || i == last || i >= left && i < right) range.push(i);
for (let i of range) {
if (l) {
if (i - l === 2) rangeWithDots.push(l + 1);
else if (i - l !== 1) rangeWithDots.push('...');
}
rangeWithDots.push(i);
l = i;
}
return rangeWithDots;
}
//Outputs: [1, 2, 3, "...", 9, 10]
答案 1 :(得分:1)
我的解决方案如下:
function p(page, pageCount = 20){
pagination = []
if(page - 3 < 0 || page > pageCount - 3)
pagination = [1,2,3, '...',pageCount-2, pageCount-1, pageCount-0]
else {
for(let i = page-2; i <= page; i++) {
pagination.push(i)
}
pagination.push('...',pageCount-2, pageCount-1, pageCount-0)
}
return pagination
}
console.log('page = 10 => ', p(10))
console.log('page = 1 => ', p(1))
console.log('page = 20 => ', p(20))
结果是:
答案 2 :(得分:1)
function getRange(page, pageCount, offset) {
let results = [...Array(pageCount + 1).keys()];
const skip = '...';
results = results.slice(page, pageCount + 1);
results.splice(offset, 0, skip);
results.splice(offset + 1, results.length - (offset + 1) - offset);
return results;
}
输出:
console.log(getRange(1, 20)); //[ 1, 2, 3, "...", 18, 19, 20 ]
console.log(getRange(10, 20)); //[ 10, 11, 12, "...", 18, 19, 20 ]