首页 > 其他分享 >js 为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n)

js 为Array实现一个Reader,通过接口getReader获取,Reader 有一个接口 read(n)

时间:2022-11-24 14:00:57浏览次数:45  
标签:getReader log read Reader 接口 Error num reader console

为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()); // []

 



标签:getReader,log,read,Reader,接口,Error,num,reader,console
From: https://www.cnblogs.com/beileixinqing/p/16921641.html

相关文章

  • 接口认证方式:Bearer Token
    因为HTTP协议是开放的,可以任人调用。所以,如果接口不希望被随意调用,就需要做访问权限的控制,认证是好的用户,才允许调用API。此文介绍下目前主流的访问权限控制/认证模......
  • 淘宝、天猫、1688、京东等25个平台的API数据接口
    接口大全;item_get获得淘宝商品详情item_get_app获得淘宝app商品详情原数据item_get_pro获得淘宝商品详情高级版item_review获得淘宝商品评论item_sku获取sku详细信......
  • 前端项目通过‘URL 重写’部署在 IIS 中,访问 WebAPI 接口
    〇、前言在前端项目开发时,我们可以通过配置代理proxy来访问本地或者是远程接口,但是部署后代理就失效了。如果项目部署在IIS上,就没法去对应到指定接口,此时就需要IIS......
  • 随想录(设计软件模块的接口)
       开发软件是一件复杂而且辛苦的工作,不同的模块之间的逻辑需要考虑,应用层与底层的关系也需要考虑。模块之间的关系处理不好,就会给软件的编写质量带来影响。当然不管软......
  • 接口自动化测试实践指导(中):接口测试场景有哪些
    在第一篇文章《接口自动化测试实践指导(上):接口自动化需要做哪些准备工作》中详细给小伙伴们讲解了接口自动化需要做哪些准备工作,准备工作中最后一步接口测试用例设计是非常......
  • 常用免费API接口整理
    获取图片验证码:​​http://bjsj.wenxuesucai.com/api/verification?appKey=gzgseyejeneuekeuegeeeseueiev&key=abcd123&codeLength=4&codeType=2&width=300&height=50&bgCo......
  • FileReader之获取文本文件内容为字符串
    FileReader之获取文本文件内容为字符串FileReader官网描述:FileReader对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob......
  • Springcloud学习笔记52--通过ApplicationContextAware接口从spring上下文中获取到需要
    1.背景在spring项目中,bean之间的依赖关系是spring容器自动管理的,但是一个项目中有些类不在spring容器中却需要使用spring管理的bean,这时候不能通过正常的方式(注解等方式)......
  • 记录今日错误,一个接口代码篇幅过长时一定得注意逻辑顺序
    今日写收藏品转赠逻辑时出现了错误,导致正常的数据在数据库查不出来,于是动手排查原因。一开始考虑可能是sql有问题,于是直接在数据库中写sql,发现可以查询到对应的数据,但是在i......
  • wap服务相关接口备注
    手机号所在地淘宝网API接口API地址:​​​http://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=15850781443​​​参数:tel:手机号码返回:JSON拍拍AP......