JavaScript:将Array数组分页处理

  • `Page4array`分页处理工具类 [^1]
    • 测试示例

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;elsetry {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下载 ↩︎

JavaScript Array数组分页相关推荐

  1. JavaScript Array数组slice方法的使用

    语法: arr.slice([begin[, end]]) begin 可选 从该索引开始提取原数组元素,如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取. 此参数缺省为0,如果 begin ...

  2. for 循环 和 Array 数组对象

    博客地址:https://ainyi.com/12 for 循环 和 Array 数组对象方法 for for-in for-of forEach效率比较 - 四种循环,遍历长度为 1000000 的 ...

  3. JavaScript 常用内置对象(字符串属性、Math对象、Array数组对象)

    1.字符串属性 <script> var test_var = "I Iove you"; console.log(test_var.charAt(3)) //char ...

  4. JavaScript的json和Array及Array数组的使用方法

    1.关于json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集.也可以称为数据集和数组类似,能够存数据! //Ar ...

  5. JavaScript Array function 常见操作json 数组

    JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组 var arr2 = new Array(20); / ...

  6. JavaScript中的Date日期、String字符串、Array数组、Math提供对数据的数学计算

    一.Date 日期对象 日期对象可以储存任意一个日期,并且可以精确到毫秒数(1/1000 秒). 定义一个时间对象 : var Udate=new Date(); 注意:使用关键字new,Date() ...

  7. javascript数组降维_js Array数组实用操作大全(≈28条)不定期更新

    来源:(更新:2019-12-26)https://github.com/renzhezhilu/Blog/blob/master/javaScript/jsAdvanced/Array%E6%93% ...

  8. JavaScript引用类型之Array数组之强大的splice()方法

    splice()方法可以说是Array数组最强大的方法,他的用法很多,主要用法是向数组的中部插入项! 下面是它的用法: arrayObject.splice(index,howmany,element ...

  9. 小汤学编程之JavaScript学习day03——对象、Array数组、String字符、Date日期、JSON

    一.JS中的对象 二.Array数组 1.特点     2.数组的定义     3.常用方法     4.数组的遍历 三.String字符 1.定义     2.常用方法 四.Date日期 1.定义  ...

最新文章

  1. python接口测试-认识GET请求
  2. 2017 年初、阿里、腾讯、百度、华为、京东、搜狗和滴滴面试题汇集(更新篇)...
  3. 一次请求到php都经过了哪些步骤,PHP高级之一次请求处理过程或生命周期详解
  4. 事物与持久化_揭开Redis面纱,发布订阅、事务、安全、持久化
  5. 用java写的教职工信息管理系统_基于Java的教师信息管理系统的设计与实现论文.doc...
  6. 搭建Harbor私有仓库
  7. python unittest教程_python unittest 基本介绍
  8. Matlab中imhist的用法
  9. 北大飞跃手册_飞跃手册 | 保研篇——北京大学
  10. 博士申请 | 西湖大学智能无人系统实验室招收空中机器人方向全奖博士生
  11. 西游记笔记与想法(2)
  12. 为什么小时候梦寐以求的游戏机,长大后买了却无法坚持玩下去?
  13. MAVEN Plugins 插件官网下载
  14. Android实现计时器(Handle+Runable)
  15. 验证码输入错误怎么再次刷新验证码
  16. 函数与事件吧,未整理
  17. Python实现QQ模拟登录
  18. 软件设计的三重境界:守-破-离
  19. 【模版】背包问题汇总
  20. 过期牛奶也有好用途(屯些牛奶,等过期后用)

热门文章

  1. 手把手教你做一个jsp servlet mysql实现的学生签到考勤请假管理系统附带视频开发教程和完整源码
  2. 如何把pdf分割成一页一页?
  3. 区块链目前实际的应用场景汇总
  4. 计算机类哪些专业是学硬件的,计算机硬件工程师主要学习什么内容
  5. VOLO Vision Outlooker for Visual Recognition论文分析
  6. mysql sql高级教程_SQL高级教程
  7. 基于jQuery的jsp表格动态合并
  8. 中文自然语言处理可能是 NLP 中最难的?
  9. 自动视觉锁螺丝机及其控制系统
  10. CAD软件中如何设置符号库?