slice是最轻量的前端分页数据切片方法,不修改原数组,通过(page-1)*pageSize和start+pageSize计算索引,自动截断越界,再结合total与pageSize可推导总页数、上下页状态。

在前端分页中,slice 是最轻量、最直接的数据切片方法,它不修改原数组,返回新数组片段,配合分页参数(当前页码、每页条数)就能快速提取对应数据,无需额外库或复杂状态管理。
用 slice 计算起始和结束索引
slice(start, end) 的 start 是包含的,end 是不包含的。分页时,起始索引为 (page - 1) * pageSize,结束索引为 start + pageSize。注意边界处理——即使计算出的 end 超过数组长度,slice 也会自动截断,不会报错。
- 第 1 页,每页 10 条 →
slice(0, 10) - 第 3 页,每页 10 条 →
slice(20, 30) - 总数据 23 条,第 3 页 →
slice(20, 30)返回最后 3 条,安全可靠
配合 total 和 currentPage 动态生成分页元信息
仅靠 slice 拿到当前页数据还不够,通常还需计算总页数、是否有上一页/下一页等。这些可由 total(总条数)和 pageSize 推导:
- 总页数:
Math.ceil(total / pageSize) - 是否有上一页:
currentPage > 1 - 是否有下一页:
currentPage - 当前页实际条数:
currentData.length(可能少于pageSize,比如末页)
避免重复计算,封装成可复用函数
把分页逻辑抽成纯函数,输入原始数组、当前页码、每页数量,输出切片结果和元信息,便于测试和复用:
立即学习“Java免费学习笔记(深入)”;
function paginate(array, page = 1, pageSize = 10) {
const start = (page - 1) * pageSize;
const currentData = array.slice(start, start + pageSize);
const total = array.length;
const totalPages = Math.ceil(total / pageSize);
<p>return {
data: currentData,
pagination: {
currentPage: page,
pageSize,
total,
totalPages,
hasPrev: page > 1,
hasNext: page < totalPages
}
};
}
// 使用:const { data, pagination } = paginate(users, 2, 8);</p>注意与后端分页的区分
前端分页适用于数据量不大(如 ≤ 5000 条)、无需频繁更新的场景。slice 只是本地切片,所有数据已加载完成;而后端分页需每次请求带 page 和 limit 参数,返回对应页数据。两者不能混用——若误把后端接口返回的单页数据再用 slice 分页,会导致“空页”或数据丢失。
不复杂但容易忽略


















