使用JS分页

时间:2019-06-10 17:26:58

标签: javascript pagination

我想使用以下格式进行分页: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=10pageCount=20

8, 9, 10, ..., 18, 19, 20

如果page=1

1, 2, 3, ..., 18, 19, 20

如果page=20

1, 2, 3, ..., 18, 19, 20

3 个答案:

答案 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))

结果是:

  • page = 10 =>(7)[8,9,10,“ ...”,18,19,20]
  • page = 1 =>(7)[1、2、3,“ ...”,18、19、20]
  • page = 20 =>(7)[1、2、3,“ ...”,18、19、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 ]