专业编程基础技术教程

网站首页 > 基础教程 正文

JS对数组进行分页(js 数组切分)

ccvgpt 2024-07-17 18:03:54 基础教程 14 ℃

前段时候写IM即时通讯的时候,要对用户的聊天记录进行分页,于是就写了一个对聊天记录进行分页的公告函数,嗯,的确很好用!

eg:

JS对数组进行分页(js 数组切分)

第一步

首先要考虑这个对数组进行分页的函数要接收的参数,在此我的是:

  • pageNo: 要获取的页码
  • pageSize: 每页数量
  • origin: 要进行分页的数组
function pagination (pageNo, pageSize, origin) {
				
}

第二步

有了这三个参数,我们已经可以实现数组分页了,再此我主要使用的是 JS 数组的 slice 方法,因为 splice 的话,会改变原数组。

slice() 方法可从已有的数组中返回选定的元素。

语法

arrayObject.slice(start,end)
  • start:必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。
  • end:可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。

首先我们需要确定切片的起始位置,因为是从0开始,所以需要减1,然后用得到的结果乘以pageSize每页数量就可以得到分页的起始位置。

得到了 pageSize 之后,我们只需要得到 end 切片终止位置即可。

用起始位置加上pageSize就可以得到。

			function pagination (pageNo, pageSize, origin) {
				// 获取切片的起始位置
				const originSection = (pageNo - 1) * pageSize
				const currentPage = origin.slice(originSection, originSection + pageSize)
			}

PS: 如果要切的起始位置大于当前数组的总长度,是切不到的,只会得到空数组,所以我们不需要做多余处理。

核心已经实现了,接下来稍微完善一下即可;我们可以把总页数,总长度等一并返回:

源码;

<!DOCTYPE html>
<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
		<meta content="Microsoft FrontPage 4.0">
		<meta content="FrontPage.Editor.Document">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			let arr = []
			for (let i = 1; i < 300; i++) {
				arr.push(i)
			}
			/**
			 * @param {Number} pageNo: 页码
			 * @param {Number} pageSize: 每页数量 
			 * @param {Array} origin: 要分页的数组
			 */
			function pagination (pageNo, pageSize, origin) {
				// 获取切片的起始位置
				const originSection = (pageNo - 1) * pageSize
				// 判断起始切片加要切的元素数量加在一起是否大于数组的长度,如果大于,说明没有更多历史记录了,返回空数组即可或者返回
				const currentPage = origin.slice(originSection, originSection + pageSize)
				return {
					currentPage: pageNo,
					data: currentPage,
					last_page: Math.ceil(origin.length/pageSize), // 总页数(最后一页)
					per_page: pageSize,
					total: origin.length
				}
			}
			console.log(pagination(20, 10, arr))
		</script>
	</body>
</html>

Tags:

最近发表
标签列表