分页计算算法

Alv*_*vin 2 javascript algorithm node.js

我正在尝试计算分页:

var pagination = {
 total: result.length,
 per_page: itemsPerPage,    // required
 current_page: currentPage, // required
 last_page: users.length / itemsPerPage,    // required
 from: (itemsPerPage * pageNumber) + 1,
 to: itemsPerPage * (pageNumber + 1)           //required
};
Run Code Online (Sandbox Code Playgroud)

假设结果长度为2,itemsPerPage为5,currentPage为1,我得到了:

total: 2
per_page: 5
current_page: 1
last_page: 0.4
from: 6
to: 10
Run Code Online (Sandbox Code Playgroud)

我认为有些不对。

Luc*_*sta 7

要舍入最大值,可以使用Math.ceilon last_page

每页的项目可以是静态的,可以手动定义。然后,from可以((currentPage - 1) * itemsPerPage) + 1

  • 如果当前页面为1,(((1 -1)* 5)+1 = 1。
  • 第二页:((2 -1)* 5)+1 = 6,依此类推。

然后可以currentPage * itemsPerPage。例如,如果当前页面为1,则1 * 5 = 5,如果第二页为:2 * 5 =10。请看下面的示例:

var pagination = {
 total: result.length,
 per_page: itemsPerPage,    
 current_page: currentPage, 
 last_page: Math.ceil(result.length / itemsPerPage),
 from: ((currentPage -1) * itemsPerPage) + 1,
 to: currentPage  * itemsPerPage
};
Run Code Online (Sandbox Code Playgroud)
Total = 15;
per_page = 5;
currentPage = 1;
last_page = truncate (15 / 5) = 3;
from: ((1-1) * 5) + 1 = 1 //first page
      ((2-1) * 5) + 1 = 6 //second page
to: 1 * 5 = 5 //first page
    2 * 5 = 10 // second page
From 1 to 5 // first page
From 6 to 10 // second page
From 11 to 15 // last page
Run Code Online (Sandbox Code Playgroud)

  • 这个`to`是错误的,请在https://snack.expo.io/6kaxfQGzP上查看它,在这个例子中我有9个条目,最后一页应该有`to=8`,因为列表长度是`8`,并且在演示中,它被写为“9”,这是最后一个可用行,而不是最后一个条目。 (3认同)

Jef*_*dez 5

上面的答案以函数的形式:

function pagination(length, currentPage, itemsPerPage) {
    return {
        total: length,
        per_page: itemsPerPage,
        current_page: currentPage,
        last_page: Math.ceil(length / itemsPerPage),
        from: ((currentPage - 1) * itemsPerPage) + 1,
        to: currentPage * itemsPerPage
    };
};
Run Code Online (Sandbox Code Playgroud)