2016-09-23 85 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 
    }; 
};