如何把一个对象变成可迭代对象?
创始人
2025-05-31 12:41:03
0

可迭代对象(Iterable object)是数组的泛化,这个概念是在说任何对象都可以被定制为可在 for…of 循环中使用的对象。
也就是说,可以应用 for…of 的对象被称为 可迭代对象。

迭代器

在 JavaScript 中,迭代器是一个对象,它定义一个序列,并在终止时可能返回一个返回值。

更具体地说,迭代器是通过使用 next() 方法实现Iterator protocol的任何一个对象,该方法返回具有两个属性的对象:

  • value,这是序列中的 next 值
  • done,如果已经迭代到序列中的最后一个值,则它为 true
    如果 value 和 done 一起存在,则它是迭代器的返回值。

一旦创建,迭代器对象可以通过重复调用 next() 显式地迭代。

迭代一个迭代器被称为消耗了这个迭代器,因为它通常只能执行一次。

在产生终止值之后,对 next() 的额外调用应该继续返回 {done: true}

Javascript 中最常见的迭代器是 Array 迭代器,它只是按顺序返回关联数组中的每个值。

虽然很容易想象所有迭代器都可以表示为数组,但事实并非如此。数组必须完整分配,但迭代器仅在必要时使用,因此可以表示无限大小的序列,例如 0 和无穷大之间的整数范围。

这是一个可以做到这一点的例子。它允许创建一个简单的范围迭代器,它定义了从开始(包括)到结束(独占)间隔步长的整数序列。它的最终返回值是它创建的序列的大小,由变量 iterationCount 跟踪。

let index = 0
const bears = ['ice', 'panda', 'grizzly']let iterator = {next() {if (index < bears.length) {return { done: false, value: bears[index++] }}return { done: true, value: undefined }}
}console.log(iterator.next()) //{ done: false, value: 'ice' }
console.log(iterator.next()) //{ done: false, value: 'panda' }
console.log(iterator.next()) //{ done: false, value: 'grizzly' }
console.log(iterator.next()) //{ done: true, value: undefined }

实现可迭代对象

如果一个对象拥有 [Symbol.iterator] 方法,并且该方法返回一个迭代器对象,这样的对象即可称为可迭代对象

let info = {bears: ['ice', 'panda', 'grizzly'],[Symbol.iterator]: function() {let index = 0let _iterator = {//这里一定要箭头函数,或者手动保存上层作用域的thisnext: () => {if (index < this.bears.length) {return { done: false, value: this.bears[index++] }}return { done: true, value: undefined }}}return _iterator}
}let iter = info[Symbol.iterator]()
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())
console.log(iter.next())//符合可迭代对象协议 就可以利用 for of 遍历
for (let bear of info) {console.log(bear)
}
//ice panda grizzly

相关内容

热门资讯

浦银经济带崛起混合A:2025... AI基金浦银经济带崛起混合A(519175)披露2025年四季报,第四季度基金利润5.58万元,加权...
从“车主”到“同学”:仰望商业... 在高端汽车市场,传统的用户关系往往止步于销售与服务。但比亚迪旗下高端新能源汽车品牌仰望,却在其独特的...
艺恩数据:2025年明星营销市... 今天分享的是:艺恩数据:2025年明星营销市场与趋势观察报告 报告共计:34页 2025年明星营销市...
临港半导体产业版图持续扩容 重... 一批重点项目集中开工投用 临港新片区半导体产业版图持续扩容 昨天上午,临港新片区举办2026年1月份...
嘉实基金方晗:2026年权益市... 来源:新浪财经 1月23日,嘉实基金举办“投资好时节”嘉实基金2026投资策略峰会。嘉实基金股票策...
小贷新规“余震”:融资性信保走... 来源:21世纪经济报道 21世纪经济报道记者 杨梦雪 高息贷款产品及其关联行业在一系列新规后“余震”...
和讯投顾郭磊:四条铁律,告别股... 1月23日,和讯投顾郭磊表示,在股市里长期稳定赚钱,靠的不是秘籍绝招,而是几条简单原则。今天就把这4...
思勇明升任德华安顾人寿董事长,... 德华安顾人寿 视觉中国 资料图 德华安顾人寿董事长改由外资股东委派。 1月22日,德华安顾人寿保险有...
甲状腺结节随访期,记住“三个平... 太原龙城中医医院科普:查出甲状腺良性结节后,很多人会陷入持续的焦虑中,既担心结节变化,又对随访充满忐...
华夏基金鲁亚运:“核心+卫星”... 来源:滚动播报 (来源:财闻) 2026年险资有望提供万亿级别的入市资金。 1月23日,在同花顺(...
海光信息大宗交易成交1.50万... 海光信息1月22日大宗交易平台出现一笔成交,成交量1.50万股,成交金额432.75万元,大宗交易成...
晚间公告|1月23日这些公告有... 【品大事】 华立股份:延期回复上交所对公司收购事项问询函 华立股份(603038)公告,公司于202...
百川生物59岁董事长陈彪曾是公... 瑞财经 刘治颖 1月22日,百川生物科技股份有限公司(以下简称:百川生物)在浙江证监局完成IPO辅导...
包良清父子控制87.18%表决... 瑞财经 严明会近期,丹东东方测控技术股份有限公司(以下简称:东方测控)科创板IPO获受理,保荐机构为...
“大龄青年安置小区”火了,20... 近日,浙江宁波一镇建造的“大龄青年安置房小区”引发关注。 “不是20岁就算大龄,它只是一个购房...
构建无缝协同网络:企业多分支机... 随着企业规模扩大、分支机构增多,跨地区、跨部门的远程协作变得日益重要。为此,构建一个稳定、专业的远程...
中国建材(03323)完成发行... 来源:智通财经网 中国建材(03323)发布公告,根据《中国建材股份有限公司2026年面向专业投资者...
2025年新增8家,山东推动银... 齐鲁晚报·齐鲁壹点记者 黄寿赓 实习生 宋佳睿 1月23日,中国人民银行山东省分行召开2025年山东...
182天!富森美董事长刘兵回归 文/乐居财经 张丹 横跨2025年和2026年,将近半年的时间,刘兵重新回到他原本的位置。 1月23...
机构席位买入898.39万 北... 每经讯,2026年1月23日,北交所上市公司能之光(920056,收盘价:30.45元)登上龙虎榜,...