Javascript迭代器
JavaScript 迭代器在 ES6 中引入,用于遍歷一系列值,通常是集合。根據(jù)定義,迭代器必須實(shí)現(xiàn) next()
函數(shù)。該函數(shù)返回一個(gè) { value, done } 形式的對(duì)象,其中 value 是迭代序列中的下一個(gè)值,done 是一個(gè)布爾值,確定該序列是否已耗盡。
下面我們來看一個(gè)實(shí)際項(xiàng)目中使用的簡(jiǎn)單迭代器示例:
LinkedList
數(shù)據(jù)結(jié)構(gòu),它內(nèi)部使用一個(gè)數(shù)據(jù)數(shù)組。數(shù)組中的每個(gè)項(xiàng)目都有一個(gè)值和一些特定于實(shí)現(xiàn)的屬性,用于確定其在序列中的位置。默認(rèn)情況下,從這個(gè)類構(gòu)造的對(duì)象是不可迭代的。為了定義迭代器,我們使用 Symbol.iterator
并對(duì)其進(jìn)行設(shè)置,以便返回的序列基于類的內(nèi)部實(shí)現(xiàn)按順序排列,而返回的項(xiàng)只返回其值。
此外,迭代器只是函數(shù),這意味著它們可以像任何其他函數(shù)一樣被調(diào)用(例如,將迭代委托給現(xiàn)有迭代器),同時(shí)也不限于 Symbol.iterator
SpecialList
可迭代,返回?cái)?shù)據(jù)數(shù)組的確切值。同時(shí),我們還定義了一個(gè) values()
方法,它本身也是一個(gè)迭代器,在數(shù)據(jù)數(shù)組上使用 Array.prototype.filter()
和 Array.prototype.map()
。最后,我們返回結(jié)果的 Symbol.iterator