js 为array实现一个reader,通过接口getreader获取,reader 有一个接口 read(n)_蓓蕾心晴-编程思维

为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n)
每次调用会按顺序读区数组的n(默认为1)个元素,调用不会改变数组本身的值,若数组已全部读取完则返回空数组,若传入的参数不为正整数则抛出异常
例:

const arr = [1, 2, 3, 4, 5, 6]
const reader = arr.getReader()
console.log(reader.read(‘1’)) // Error
console.log(reader.read(-1)) // Error
console.log(reader.read(1.5)) // Error
console.log(reader.read()) // [1]
console.log(reader.read(1)) // [2]
console.log(reader.read(2)) // [3,4]
console.log(reader.read(3)) // [5,6]
console.log(reader.read()) // []

方案一,splice

Array.prototype.getReader = function () {
    //复制原数组
    let readArr = [...this];
    return {
        read(num) {
            //如果有参数,判断参数
            if (num) {
                try {
                    if (typeof num == "string") {
                        throw Error();
                    } else if (!/(^[1-9]\d*$)/.test(num)) {
                        //正则判断正整数 /^[1-9]\d*$/
                        throw Error();
                    } else {
                        return readArr.splice(0, num);
                    }
                } catch (e) {
                    return "Error";
                }
            } else {
                return readArr.splice(0, 1);
            }
        },
    };
};

 

方案二,slice

Array.prototype.getReader = function () {
    //拿到原数组
    let that = this;
    let count = 0;
    return {
        read(num) {
            //如果有参数,判断参数
            if (num) {
                try {
                    if (typeof num == "string") {
                        throw Error();
                    } else if (!/(^[1-9]\d*$)/.test(num)) {
                        //正则判断正整数 /^[1-9]\d*$/
                        throw Error();
                    } else {
                        let res = that.slice(count, count + num);
                        count = count + num;
                        return res;
                    }
                } catch (e) {
                    return "Error";
                }
            } else {
                //如果没有参数,默认为1
                if (that.length) {
                    let res = that.slice(count, count + 1);
                    count = count + 1;
                    return res;
                } else {
                    return [];
                }
            }
        },
    };
};
//实例
const arr = [1, 2, 3, 4, 5, 6];
const reader = arr.getReader();
console.log(reader.read("1")); // Error
console.log(reader.read(-1)); // Error
console.log(reader.read(1.5)); // Error
console.log(reader.read()); // [1]
console.log(reader.read(1)); // [2]
console.log(reader.read(2)); // [3,4]
console.log(reader.read(3)); // [5,6]
console.log(reader.read()); // []

 



版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/beileixinqing/p/16921641.html

06#web 实战:实现可滑动的标签页_enziandom-编程思维

实现效果图 本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程。👉我的 Gitee 和 GitHub 地址。注意哦:这个只是 PC 上的标签页,手机端的没用,因为监听器是 mouse,而不是手势。 在线浏览地址:10.标签页。 构建静态页面 可滑动的页面需要 5 个 div,

redux 的困扰与如何技术选型_hh54188-编程思维

文章的名字我想了很久,备选项有“我再不推荐 Redux”,“Redux 为什么令我头疼”,“Redux 进化启示录”等等。通过这一系列名字我想你大概能猜到我接下来想聊的问题是什么,但这个问题放眼望去不是 Redux 独有,而是在做技术决策时经常会遇到的,即使对于非前端背景的开发者也同样成立。最后决定用一个带有开放式标题

leetcode 88. 合并两个有序数组 js实现_蓓蕾心晴-编程思维

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情

嘿,vue中keep-alive有个「大坑」你可能还不知道 - 编程思维

背景背景是这样的,我们使用vue2开发一个在线客服使用的IM应用,基本布局是左边是访客列表,右边是访客对话,为了让对话加载更友好,我们将对话的路由使用<keep-alive>缓存起来。但是如果将所有对话都缓存,未必会造成缓存过多卡顿的问题。自然,就使用上了<keep-alive>提供的max属性

mobtech短信验证 for flutter - 编程思维

这是一个基于SMSSDK功能的扩展的Flutter插件。使用此插件能够帮助您在使用Flutter开发应用时,快速地实现获取验证码功能。Demo例子:https://github.com/MobClub/SM...开始集成https://pub.dev/packages/mobsms在pubspec.yaml文件中加入下

leetcode 88. 合并两个有序数组 js实现_蓓蕾心晴-编程思维

给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情

redux原理分享_空山与新雨-编程思维

概述 一个状态管理工具 Store:保存数据的地方,你可以把它看成一个容器,整个应用只能有一个 Store。 State:包含所有数据,如果想得到某个时点的数据,就要对 Store 生成快照,这种时点的数据集合,就叫做 State。 Action:Action 就是 View 发出的通知,表示 State 应该要发生

前端资源公共cdn哪里找_空山与新雨-编程思维

写一些demo的时候使用vue/react脚手架来初始项目太小题大做,直接在html中写代码需要找到一些框架和库的cdn,这里做下推荐,仅限在测试环境用。 bootcdn 优点:是国内速度快,使用简单。 缺点:是资源有限,比如vue目前只有3.x版本,没有2.x版本 unpkg 缺点: 优势网络会中断 优点:和npm保