当前位置: 首页 > news >正文

面试网站建设问题北京软件开发学校

面试网站建设问题,北京软件开发学校,手机微信官方网站,优化措施最新回应文章目录前言实现原理:调用迭代器自制迭代器前言 迭代器是 JSt 中一种特殊的对象,它提供了一种统一的、通用的方式遍历个各种不同类型的数据结构。 可以遍历的数据结构包括:数组、字符串、Set、Map 等可迭代对象。我们也可以自定义实现迭代器…

文章目录

  • 前言
    • 实现原理:
    • 调用迭代器
    • 自制迭代器


前言

迭代器是 JSt 中一种特殊的对象,它提供了一种统一的、通用的方式遍历个各种不同类型的数据结构。

可以遍历的数据结构包括:数组、字符串、Set、Map 等可迭代对象。我们也可以自定义实现迭代器,以支持遍历自定义的数据结构。

实现原理:

迭代器的实现原理是通过定义一个特定的next() 方法,在每次迭代中返回一个包含两个属性的对象:donevalue
next()方法

  1. 参数:无参数或者有一个参数。
  2. 返回值:返回一个有两个属性的对象。属性值如下:
    done:布尔值,表示迭代是否完成
    value:当前步骤的值

每次调用next方法,都会改变value值至下一步,直到迭代完成

据此,可以给数组手写一个迭代器函数

const strArr = ['a', 'b', 'c', 'd'];// 为数组封装迭代器
function create(arr) {let index = 0;return {next: () => {if (index < arr.length) {return { done: false, value: arr[index++] };} else {return { done: true };}},};
}const str = create(strArr);
console.log(JSON.stringify(str.next()));
console.log(JSON.stringify(str.next()));
console.log(JSON.stringify(str.next()));
console.log(JSON.stringify(str.next()));
console.log(JSON.stringify(str.next()));
//输出
// {"done":false,"value":"a"}
// 测试.html:28 {"done":false,"value":"b"}
// 测试.html:29 {"done":false,"value":"c"}
// 测试.html:30 {"done":false,"value":"d"}
// 测试.html:31 {"done":true}

可以看到 ,每调用一次next,value会向后移动,直至遍历完毕

调用迭代器

语法

const a=可迭代对象[Symbol.iterator]()

实例如下

const myArr = ['a', 'b', 'c', 'd'];// 获取数组自带的迭代器对象
const myIterator = myArr[Symbol.iterator]();// 通过迭代器的 next() 方法遍历数组
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
//输出
// {"value":"a","done":false}
// 测试.html:17 {"value":"b","done":false}
// 测试.html:18 {"value":"c","done":false}
// 测试.html:19 {"value":"d","done":false}
// 测试.html:20 {"done":true}

自制迭代器

很多数据对象由于不是可迭代对象,我们可以为其手动创建一个迭代器

与函数不同,这次将其封装在对象中,并且此后调用方法一致

const myObj1 = {strArr: ['a', 'b', 'c', 'd'],// 在 myObj1 的内部创建一个迭代器[Symbol.iterator]: function () {let index = 0;const Iterator = {next: function () {if (index < myObj1.strArr.length) {return { done: false, value: myObj1.strArr[index++] };} else {return { done: true };}},};return Iterator;},
};// 获取 myObj1 的迭代器对象
const myIterator = myObj1[Symbol.iterator]();
// 通过迭代器遍历 myObj1.strArr 的数据
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
console.log(JSON.stringify(myIterator.next()));
// 输出
// {"done":false,"value":"a"}
// 测试.html:32 {"done":false,"value":"b"}
// 测试.html:33 {"done":false,"value":"c"}
// 测试.html:34 {"done":false,"value":"d"}
// 测试.html:35 {"done":true}

大部分步骤一致,只是在函数前加上[Symbol.iterator]:
而可迭代对象可以使用for of进行遍历
如下

for(let item of myObj1){console.log(item);
}
//输出同样效果

当自定义类复杂时,自制迭代器也就更难写

http://www.dtcms.com/a/595700.html

相关文章:

  • 自己建私人网站做外贸不好做wordpress 更改媒体库路径
  • 网站会员推广功能门户网站建设的重要作用
  • 网站文字设计无锡专业做网站
  • 制作网站首先做的工作做家电网站
  • 网站开发大学是什么专业软件开发专业好吗
  • 免费网站推荐货源中国欧洲陆运专线
  • 个人单页网站建设北京海淀财政局网站
  • 公司网站建设情况说明微信制作企业网站
  • 我公司想做网站福建微网站建设公司推荐
  • 好用的网站系统东莞网络安全建设
  • 网站建设图片手机黑龙江企业信息系统
  • 网站建设的制度网站托管好吗
  • 文字网站和图片网站哪个难做新媒体营销和传统营销的区别
  • 贺州市住房和城乡建设局网站设计网站公司长沙
  • 使用免费网站制作软件学生个人网站制作软件
  • 该去哪里购买网站域名和空间东莞营销网站
  • 做百度手机网站点上海注册公司流程及资料
  • 济南智能网站建设电话wordpress百度云
  • 用什么软件可以做网站动态投资类wordpress主题
  • 网站建设对客户的优势wordpress 评论 不好
  • 简易网页设计代码网站打开速度慢 如何优化
  • 用网站源码做网站江干区住房和城市建设局网站
  • 网站规划与建设重要性理解与体会南昌做网站开发的公司有哪些
  • 怎么关注网站 在手机上广州门户网站
  • 亚马逊做超链接的网站中国风手机网站模板
  • 网站结构怎么分析做惠而浦售后网站赚钱
  • diy建站系统深圳十大平面设计公司排名
  • h5网站建设哪家好搜狐做app的网站
  • 软件开发资源网站镇江网络广播电视
  • 网站优化公司免费咨询做网站在哪接广告