JavaScript Array数组分页

JavaScript Array数组分页javaScript:将Array数组分页处理,支持分页数据容错;兼容版本:ES6。

大家好,又见面了,我是你们的朋友全栈君。

Page4array分页处理工具类 1

/** * 分页数组 * @param array {@link Array}:源数组; * @param pn {@link Number}:当前页; * @param ps {@link Number}:页显示数; * @param fn {@link Function}:执行完成后回调; * @return {@link Page4array} * @constructor * @version V1.0.1 * @author Haining.Liu */
function Page4array(array, pn, ps, fn) { 
   
	for (let i = 1, len = arguments.length; i < len; i++) { 
   
		let pm = arguments[i];
		if (pm && typeof pm == 'function') { 
       //切换回调参数位置
			arguments[i] = undefined;
			fn = pm;
			break;
		}
	}
	this.fn = fn;
	this.source = array;
	this.total = 0; //总数
	this.size = 1;  //总页数
	if (array && array.length) { 
   
		this.total = array.length;
		ps = (!ps || ps < 0) ? 10 : Number(ps);
		if (ps > 0)
			this.size = Math.ceil(this.total / ps);
	}
	this.adjust(pn, ps);
	Object.prototype.toString.call(array) == '[object Array]' ? this.run() : (this.result = []);
	return this;
}

/** * 静态初始化函数 * @param array {@link Array}:源数组; * @param pn {@link Number}:当前页; * @param ps {@link Number}:页显示数; * @param fn {@link Function}:执行完成后回调; * @return {@link Page4array} * @constructor * @version V1.0.1 * @author Haining.Liu */
Page4array.Init = function () { 
   
	return new Page4array(...arguments);
};

(function () { 
   
	/** * 上一页 * @param fn {@link Function}:执行完成后回调; * @return {@link Page4array} */
	Page4array.prototype.prev = function (fn) { 
   
		this.pageNum--;
		return this.run(fn);
	};
	/** * 下一页 * @param fn {@link Function}:执行完成后回调; * @return {@link Page4array} */
	Page4array.prototype.next = function (fn) { 
   
		this.pageNum++;
		return this.run(fn);
	};
	/** * 去指定页 * @param pn {@link Number}:指定页; * @param fn {@link Function}:执行完成后回调; * @return {@link Page4array} */
	Page4array.prototype.to = function (pn, fn) { 
   
		this.adjust(pn);
		return this.run(fn);
	};
	/** * 执行 * @param fn {@link Function}:执行完成后回调; * @return {@link Page4array} */
	Page4array.prototype.run = function (fn) { 
   
		this.adjust();
		// this.start = (this.pageNum - 1) * this.pageSize;
/* if (this.start > this.total) { this.result = []; return this; }*/
		this.result = this.source.slice(this.start, this.end + 1);
		this.fn = fn || this.fn;
		if (!this.fn || typeof this.fn != 'function')
			this.data = undefined;
		else
			try { 
   
				this.data = this.fn(this.result, this);
			} catch (e) { 
   
				console.error(this.data = e);
			}
		return this;
	};
	/** * 分页值校准 * @param pn {@link Number}:当前页; * @param ps {@link Number}:页显示数; * @return {@link Page4array} */
	Page4array.prototype.adjust = function (pn, ps) { 
   
		this.pageNum = pn || this.pageNum;
		this.pageSize = ps || this.pageSize;
		this.pageSize = (!this.pageSize || this.pageSize < 0) ? 10 : Number(this.pageSize);
		this.pageNum = (!this.pageNum || this.pageNum <= 0) ? 1 :
				(this.pageNum > this.size) ? this.size : Number(this.pageNum);

		this.start = (this.pageNum - 1) * this.pageSize;
		this.end = (this.start + this.pageSize >= this.total) || this.pageSize == 0 ?
				this.total : this.start + this.pageSize;
		this.end--;
		return this;
	};
	/** * 重写toString * @return {@link String} */
	Page4array.prototype.toString = function () { 
   
		return JSON.stringify(this);
	};
})();

测试示例

let ids = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ];
// ids = { //设置为错误Object类型,模仿Array
// length: 12
// };
// ids = null;

// let page = Page4array.Init(ids); //调用静态初始化函数,同 new Page4array(ids) 的写法
// console.log(page);
// console.log(page.prev());
// console.log(page.next(fn));
// console.log(page.next(null));
// page.fn = null; //将当前实例的回调置空
// console.log(page.prev());
for (let i = 0; i < 6; i++) { 
   
	console.log('\t========', i, '\r\n');
	console.log(Page4array.Init(ids, fn, 5));
	console.log(Page4array.Init(ids, i, 5, fn));
	console.log(Page4array.Init(ids, i, fn));
	console.log(Page4array.Init(ids, i, 15, fn));
}

/** * 模仿分页回调处理 * @param data {@link Array}:当前分页数组; * @return {@link Array} * @version V1.0.1 */
function fn(data) { 
   
	let rs = new Array(data.length);
	for (let i = 0; i < data.length; i++)
		rs[i] = { 
   id: data[i]};
	return rs;
}

使用过程中,如出现bug,或有其它优化建议,欢迎在此文章“评论区”留言讨论,并留下您的邮箱,以便改正后及时通知您。


  1. page4array.js下载 ↩︎

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/158386.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 破解不加微信看朋友圈「建议收藏」

    破解不加微信看朋友圈「建议收藏」有网友发邮件问,用空间万能查看器天涯,可以强制看非好友的朋友圈?今天小编就给大家说说微信朋友圈的一些事情。微信好友之间可以看到对方朋友圈每次发的一些动态记录,只要对方不设置让你看不到,就可以看到。不是微信好友想看对方朋友圈,也是可以理解的,毕竟微信朋友圈,和QQ空间设置了这个权限是需要权限才能进去的,有的网友有方法进别人设置了权限的QQ空间,那么微信的权限朋友圈其实和QQ权限空间原理是一样的。QQ空间和微信朋友圈其实是一样的意思,只是表现的形势不同,但是有的人喜欢上微信,有的人喜欢上QQ,不管你

    2022年4月29日
    2.7K
  • 2020最新Java常见面试题及答案

    Java最新常见面试题+答案汇总1、面试题模块汇总面试题包括以下十九个模块:Java基础、容器、多线程、反射、对象拷贝、JavaWeb模块、异常、网络、设计模式、Spring/SpringMVC、SpringBoot/SpringCloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql、Redis、JVM。如下图所示:可…

    2022年4月15日
    37
  • 实现yolo3模型训练自己的数据集总结

    实现yolo3模型训练自己的数据集总结   经过两天的努力,借鉴网上众多博客,在自己电脑上实现了使用yolo3模型训练自己的数据集并进行测试图片。本文主要是我根据下面参考文章一步步实施过程的总结,可能没参考文章中那么详细,但是会包含一些参考文章中没提及的容易掉坑的小细节,建议读者结合参考文章一起看,一步步走即可。首先贴出本文主要参考的文章以及代码出处:代码:https://github.com/qqwweee/keras-yo…

    2022年6月18日
    24
  • 【JWPlayer】官方JWPlayer去水印步骤「建议收藏」

    【JWPlayer】官方JWPlayer去水印步骤「建议收藏」JWPlayer免费版去水印

    2022年7月2日
    32
  • freebsd分片重组算法_mongodb分片算法

    freebsd分片重组算法_mongodb分片算法Q:你们redis怎么做的分布式A:我们公司redis用的murmurHash做的分片;Q:讲讲murmurHash的原理呗A:额……这块没有深入了解过(真TM掉分)哈希算法简单来说就是将一个元素映射成另一个元素,可以简单分类两类,加密哈希,如MD5,SHA256等,非加密哈希,如MurMurHash,CRC32,DJB等。这里说说Jedis中的Shard是如何使用一致性hash的首先是hash函数,在Jedis中有两种Hash算法可供选择,分别是MurMurHash和MD5.按照.

    2022年10月9日
    3
  • 从伯努利分布到多项式分布的条件_伯努利分布的期望

    从伯努利分布到多项式分布的条件_伯努利分布的期望1.伯努利分布(bernoulidistribution)又称0-1分布,指一次随机试验,结果只有两种。也就是一个随机变量的取值只有0和1。其中p表示一次伯努利实验中结果为正或为1的概率。概率计算:

    2022年10月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号