js如何建立可迭代物件

2021-10-22 09:30:58 字數 3488 閱讀 2137

如何設計乙個迭代器

迭代器的本身是乙個物件,這個物件有netx()方法返回結果物件,這個結果物件有下乙個返回值value、迭代器完成布林值done,模擬建立乙個簡單迭代器:

每次呼叫迭代器的next()都會返回下乙個物件,直到資料被用盡。

es6中迭代器的編寫過程類似,但引入了生成器物件,更簡單的建立迭代器物件。

2. 建立迭代器

es6封裝了乙個生成器(generator)用來建立迭代器。先然生成器是返回迭代器的函式,這個函式通過function後的*號表示,並使用新的內部專用關鍵字yield指定迭代器next()方法的返回值

用es6生成器建立乙個迭代器:

function

*createiterator()

let someiterator =

createiterator()

console.

log(someiterator.

next()

);// console.

log(someiterator.

next()

);// console.

log(someiterator.

next()

);//

使用yield關鍵字可以返回任意值或者表示式,可以給迭代器批量新增元素:

function

*createiterator

(items)

}let someiterator =

createiterator([

123,

'mge'])

; console.

log(someiterator.

next()

);// console.

log(someiterator.

next()

);// console.

log(someiterator.

next()

);//

由於生成器本身是函式,所以可新增到物件中,使用方式如下:

let obj =}}

let someiterator = obj.

createiterator([

123,

'mgd'])

; console.

log(someiterator.

next()

);// console.

log(someiterator.

next()

);// console.

log(someiterator.

next()

);//

生成器函式的特點是:當執行完一句yield語句後函式會自動停止執行,再次呼叫迭代器的next()方法才會繼續執行下乙個yield語句。

這種自動中止函式執行的能力衍生出很多高階用法,並提供了async/await語法糖。

es6中常用的集合物件(陣列、set、map集合)和字串都是可迭代物件

這些物件都有預設的迭代器和symbol.iterator屬性。

通過生成器建立的迭代器也可以是可迭代物件

生成器缺省會為symbol.iterator屬性賦值。

可迭代物件具有symbol.iterator屬性,即具有symbol.iterator屬性的物件都有預設迭代器。

我們可以用symbol.iterator來訪問物件的預設迭代器,例如對於乙個陣列:

顯然陣列、set/map集合、字串都是可迭代物件,而weakset/weakmap集合(弱引用集合)是不可迭代的。

預設情況下,自定義的物件都是不可迭代的

通過生成器建立的迭代器也是一種可迭代物件,生成器會預設為symbol.iterator屬性賦值

let collection =}}

const

isiterator

= obj => obj !=

null

&&typeof obj[symbol.iterator]

==='function'

; console.

log(

isiterator

(collection));

//true

for(

let item of collection)

陣列items是可迭代物件,collection物件通過給symbol.iterator屬性賦值也成為可迭代物件。

可迭代物件 迭代物件

2.可迭代物件 迭代器物件 滿足可迭代物件前提 可以被迴圈的物件就是可迭代物件 例如 str list tuple set dict range generator 可以使用比較高效的方式判斷某個物件是否是可迭代物件 需要匯入collections模組中的iterable屬性,並且需要配合內建函式i...

js中的迭代器,可迭代物件

1.1 判斷是否擁有可迭代能力 console.log array.prototype.hasownproperty symbol.iterator console.log set.prototype.hasownproperty symbol.iterator 1.2 手動實現迭代器const c...

可迭代物件

可迭代物件 1.生成器 2.元組 列表 集合 字典 字串 如果判斷乙個物件可迭代?from collections import iterable list1 1,2,3,4,5,6,7,8,9 c isinstance list1,iterable print c 迭代是訪問結合元素的一種方式。迭...