2016-09-23 192 views
1

我试图计算分页:分页计算算法

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 
}; 

咱们说的结果长度为2,itemsPerPage为5,当前页是1,我得到这个:

total: 2 
per_page: 5 
current_page: 1 
last_page: 0.4 
from: 6 
to: 10 

我认为有些事情是不正确的。

回答

4

要获得最大值,可以使用Math.ceil,地址为last_page。每页的itens可以是静态的,手动定义的。那么,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 
 
};
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

1

last_page应该使用Math.ceil(),这样就没有浮点数了。那么0.4将是1,这是正确的。 from应该是itemsPerPage * (pageNumber - 1) - 这个假定值是从0开始的,并且pageNumber从1. 开始,然后应该是itemsPerPage * pageNumbertotal.length的Math.min(),以便使用from-count加上itemsPerPage,或者,如果此值大于总项目计数,则使用总项目计数。

+0

谢谢NikxDa – Alvin

0

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

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 
    }; 
};