Sal*_*aFG 39 javascript arrays pagination
我想写一个JavaScript函数,它接受一个array,page_size并page_number作为参数,并返回一个数组模仿分页结果:
paginate: function (array, page_size, page_number) {
return result;
}
Run Code Online (Sandbox Code Playgroud)
例如,当:
array = [1, 2, 3, 4, 5],
page size = 2,
page_number = 2,
Run Code Online (Sandbox Code Playgroud)
该函数应该返回:[3, 4].
任何想法,将不胜感激.
cas*_*raf 86
你可以使用Array.prototype.slice并只提供参数(start, end).
function paginate (array, page_size, page_number) {
--page_number; // because pages logically start with 1, but technically with 0
return array.slice(page_number * page_size, (page_number + 1) * page_size);
}
console.log(paginate([1, 2, 3, 4, 5, 6], 2, 2));
console.log(paginate([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], 4, 1));Run Code Online (Sandbox Code Playgroud)
这是一个解决方案reduce():
function paginate (arr, size) {
return arr.reduce((acc, val, i) => {
let idx = Math.floor(i / size)
let page = acc[idx] || (acc[idx] = [])
page.push(val)
return acc
}, [])
}
let array = [1, 2, 3, 4, 5]
let page_size = 2
let pages = paginate(array, page_size)
console.log(pages) // all pages
console.log(pages[1]) // second pageRun Code Online (Sandbox Code Playgroud)
它返回一个页面数组,以便您可以获取某个页面,或遍历所有页面。
我在上面看到了一个例子,它正确地(有点)做到了这一点,并想对其进行扩展。
这就是例子。
function paginate(array, page_size, page_number) {
// human-readable page numbers usually start with 1, so we reduce 1 in the first argument
return array.slice((page_number - 1) * page_size, page_number * page_size);
}
Run Code Online (Sandbox Code Playgroud)
这有一些问题。
1.) 如果page_number是 0,那么它将尝试设置-1 * page_size返回空数组的起始拆分。所以page_numberattr的最小值应该是 1,除非你在函数中处理这种情况,否则永远不会小于 1。
2.) 分割的开始和结束索引是相同的。因此,您会返回一个空数组。所以拆分应该是:
return array.split(page_number * page_size, page_number * page_size + page_size)
Run Code Online (Sandbox Code Playgroud)
function paginate(array, page_size, page_number) {
// human-readable page numbers usually start with 1, so we reduce 1 in the first argument
return array.slice((page_number - 1) * page_size, page_number * page_size);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30843 次 |
| 最近记录: |