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()); // []
分类:
javascript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南