Paginate Javascript数组

Sal*_*aFG 39 javascript arrays pagination

我想写一个JavaScript函数,它接受一个array,page_sizepage_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)

  • 它可以按您想要的任何顺序完成,但切片采用 0 索引号(从第 0 项到第 n 项切片),链接和其他人类可读格式中的页面大小通常从 1 而不是 0 开始页面。前端为1,但实际上我们使用0,我减少它并在相关时间增加它。您可以轻松地只减少第一个参数中的 page_number 而不是第二个参数 (2认同)

Hri*_*dov 9

这是一个解决方案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 page
Run Code Online (Sandbox Code Playgroud)

它返回一个页面数组,以便您可以获取某个页面,或遍历所有页面。


Jus*_*ard 6

我在上面看到了一个例子,它正确地(有点)做到了这一点,并想对其进行扩展。

这就是例子。

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)