国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

JavaScript迭代器的含義及用法

2024-05-06 15:37:40
字體:
來源:轉載
供稿:網友

什么是迭代器

迭代器就是為實現對不同集合進行統一遍歷操作的一種機制,只要給需要遍歷的數據結構部署Iterator接口,通過調用該接口,或者使用消耗該接口的API實現遍歷操作。

迭代器模式

在接觸迭代器之前,一起先了解什么是迭代器模式,回想一下我們生活中的事例。我們在參觀景區需要買門票的時候,售票員需要做的事情,他會對排隊購票的每一個人依次進行售票,對普通成人,對學生,對兒童都依次售票。售票員需要按照一定的規則,一定順序把參觀人員一個不落的售完票,其實這個過程就是遍歷,對應的就是計算機設計模式中的迭代器模式。迭代器模式,提供一種方法順序訪問一個聚合對象中的各種元素,而又不暴露該對象的內部表示。

為什么要有迭代器

回憶在我們的javascript中,可遍歷的結構以及方式有很多。JavaScript 原有的表示“集合”的數據結構,主要是數組(Array)和對象(Object),ES6 又添加了Map和Set,這樣就有了四種數據集合,而遍歷這四種結構都有不同的方法。舉個栗子,服務端提供數據給前端,前端進行數據可視化工作,對數據進行遍歷展示使用的for,但是由于業務的變化,使得后端返回的數據結構發生變化,返回對象或者是set,map,導致前端遍歷代碼大量重寫。而迭代器的目的就是要標準化迭代操作。

如何部署迭代器接口

ES6為迭代器引入了一個隱式的標準化接口。Javascript許多內建的數據結構,例如Array、Map、Set、String、TypedArray、函數的 arguments 對象、NodeList 對象都具備 Iterator 接口??梢酝ㄟ^在控制臺打印一個Array實例,查看其原型上具有一個Symbol.iterator屬性(Symbol.iterator其實是Symbol('Symbol.iterator')的簡寫,屬性名是Symbol類型代表著這個屬性的唯一以及不可重寫覆蓋),它就是迭代器函數,執行這個函數,就會返回一個迭代器對象。

雖然Javascript許多內建的數據結構已經實現了該接口,還有些結構是沒有迭代器接口的(比如對象),那怎么辦,我們需要寫迭代器,那么就需要知道迭代器是如何工作的。下面代碼實現的一個簡單迭代器:

//迭代器就是一個函數,也叫迭代器生成函數function Iterator(o){let curIndex = 0;let next = () => {return {value: o[curIndex],done: o.length == ++curIndex}}//返回迭代對象,該對象有next方法return {next}}let arr = [1,2]let oIt = Iterator(arr)oIt.next();//{value:1,done:false}oIt.next();//{value:2,done:false}oIt.next();// {value: undefined, done: true}oIt.next();// {value: undefined, done: true}

調用迭代器函數,返回一個對象,該對象就是迭代器對象,對象上擁有next方法,每一次調用next方法,都會返回數據結構的當前成員的信息。具體來說,就是返回一個包含value和done兩個屬性的對象。其中,value屬性是當前成員的值,done屬性是一個布爾值,表示遍歷是否結束。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 玉林市| 平乐县| 连平县| 沛县| 龙门县| 连州市| 大竹县| 沙河市| 商城县| 墨竹工卡县| 凤翔县| 贞丰县| 昌黎县| 贵溪市| 贡嘎县| 通山县| 东辽县| 临城县| 澜沧| 竹溪县| 巴彦淖尔市| 德江县| 阳谷县| 乌什县| 綦江县| 赞皇县| 枞阳县| 开封市| 巴青县| 景泰县| 罗定市| 梅州市| 嘉峪关市| 张家口市| 介休市| 偏关县| 亚东县| 大关县| 西乌珠穆沁旗| 洛南县| 兰西县|