亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

迭代是什么?

h9911 / 924人閱讀

摘要:本質(zhì)上,遍歷器是一種線性處理,對(duì)于任何非線性的數(shù)據(jù)結(jié)構(gòu),部署遍歷器接口,就等于部署一種線性轉(zhuǎn)換。不過,嚴(yán)格地說,對(duì)象部署遍歷器接口并不是很必要,因?yàn)檫@時(shí)對(duì)象實(shí)際上被當(dāng)作結(jié)構(gòu)使用,沒有結(jié)構(gòu),而原生提供了。

經(jīng)??吹?b>迭代這個(gè)詞,那么歸總下吧~

什么是可迭代對(duì)象

一個(gè)對(duì)象(或它的原型鏈上的某個(gè)對(duì)象)必須有一個(gè)名字是 Symbol.iterator的屬性

String Array Map Set 是內(nèi)置可迭代的對(duì)象,因?yàn)樗鼈兊脑蛯?duì)象都有一個(gè) @@iterator 方法

Object 不是

接收可迭代對(duì)象的API

數(shù)組的遍歷 會(huì)調(diào)用迭代器接口,所以使用到數(shù)組作為參數(shù)的場(chǎng)合,都使用了遍歷器

Map([iterable]) WeakMap([iterable])

Set([iterable]) WeakSet([iterable])

Promise.all([iterable]) Promise.race([iterable])

Array.from([iterable])

for...in for...of

getOwnPropertyNames

不能用 for...in 來迭代 Set, 因?yàn)?Set 中的元素沒有 key, 使用 for...of 遍歷

迭代器 與 迭代對(duì)象的差別:

迭代器是一種特殊的對(duì)象,每一個(gè)迭代器都有一個(gè) next(),該方法返回一個(gè)對(duì)象,包括 valuedone 屬性

    // 實(shí)現(xiàn)一個(gè)返回迭代器對(duì)象的函數(shù)
    function createIterator(items){
        var i = 0;
        return {
          next () {
                var done = (i >= items.length);
                var value = !done ? items[i++] : "undefined"
                return {
                    done,
                    value
                }
            }
        }
    }
    const a = createIterator([1, 2, 3]);   
    //該方法返回的最終是一個(gè)對(duì)象,包含value、done屬性。
    console.log(a.next()); //{value: 1, done: false}
    console.log(a.next()); //{value: 2, done: false}
    console.log(a.next()); //{value: 3, done: false}
    console.log(a.next()); //{value: undefined, done: true}
可迭代 和 可枚舉的差別
舉例說明不可迭代
let arrayLike = {
  0: "aa",
  1: "bb",
  2: "cc",
  length: 3
}

for (var item of arrayLike) {
  console.log(item) // TypeError: arrayLike is not iterable
}

let obj = {
  a: "monday",
  b: "sunday"
}

for (var item of obj) {
  console.log(item) // TypeError: obj is not iterable
}

上面這個(gè)例子是想遍歷一個(gè) 類數(shù)組對(duì)象 和 一個(gè) 對(duì)象, 因?yàn)樗豢傻?,所以?for...of不能遍歷
報(bào)錯(cuò)TypeError: arrayLike is not iterable

但是使用 for...in 又可以遍歷了

for (var item in arrayLike) {
  console.log(item) // 0 1 2 length
}

for (var item in obj) {
  console.log(item) // a b 
}

這是為什么呢?

附上阮一峰老師的解釋

對(duì)象(Object)之所以沒有默認(rèn)部署Iterator接口,是因?yàn)閷?duì)象的哪個(gè)屬性先遍歷,哪個(gè)屬性后遍歷是不確定的,需要開發(fā)者手動(dòng)指定。本質(zhì)上,遍歷器是一種線性處理,對(duì)于任何非線性的數(shù)據(jù)結(jié)構(gòu),部署遍歷器接口,就等于部署一種線性轉(zhuǎn)換。不過,嚴(yán)格地說,對(duì)象部署遍歷器接口并不是很必要,因?yàn)檫@時(shí)對(duì)象實(shí)際上被當(dāng)作Map結(jié)構(gòu)使用,ES5沒有Map結(jié)構(gòu),而ES6原生提供了。

以及知乎上的解答為什么for...of對(duì)象不可迭代---賀師俊回調(diào) , 寫的很棒,一下就清晰了~

// 幾種迭代方式
for (const k of Object.keys(obj)) ... // enumerable own keys
for (const [k, v] of Object.entries(obj)) ... // enumerable own [key, value]s
for (const k of Object.getOwnPropertyNames(obj)) // all own keys
for (const s of Object.getOwnPropertySymbols(obj)) // all own symbols
for (const k of Reflect.ownKeys(obj)) // all own keys (include symbols)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99322.html

相關(guān)文章

  • 什么range不迭代器?range到底什么類型?

    摘要:為什么不更規(guī)范點(diǎn),令生成的是迭代器呢關(guān)于這個(gè)問題,我沒找到官方解釋,以下純屬個(gè)人觀點(diǎn)。類型是什么以上是我對(duì)為什么不產(chǎn)生迭代器的一種解答。小結(jié)回顧全文,我得到了兩個(gè)偏冷門的結(jié)論是可迭代對(duì)象而不是迭代器對(duì)象是不可變的等差序列。 showImg(https://segmentfault.com/img/bVbmKjd?w=6000&h=4000); 迭代器是 23 種設(shè)計(jì)模式中最常用的一種(...

    187J3X1 評(píng)論0 收藏0
  • 當(dāng)談?wù)?em>迭代器時(shí),我談些什么

    摘要:示例代碼如下此示例中可以看出,當(dāng)?shù)鹘K止時(shí),通過拋出異常告知迭代器已耗盡。但如果迭代器所指向的數(shù)據(jù)結(jié)構(gòu)在其存在時(shí)發(fā)生了插入或刪除操作,則迭代器將可能失效。與的情形類似,對(duì)進(jìn)行任何插入操作也將損壞迭代器。 花下貓語:之前說過,我對(duì)于編程語言跟其它學(xué)科的融合非常感興趣,但我還說漏了一點(diǎn),就是我對(duì)于 Python 跟其它編程語言的對(duì)比學(xué)習(xí),也很感興趣。所以,我一直希望能聚集一些有其它語言基...

    王軍 評(píng)論0 收藏0
  • Python:range 對(duì)象并不迭代

    摘要:簡(jiǎn)評(píng)迭代器是惰性可迭代對(duì)象,函數(shù)在中是一個(gè)惰性的可迭代對(duì)象,那么是不是迭代器呢為什么。如果你不能將某些東西傳遞給函數(shù),那么它不是一個(gè)迭代器。的對(duì)象不是迭代器。 簡(jiǎn)評(píng):迭代器(iterator)是惰性可迭代對(duì)象(lazy iterable),range 函數(shù)在 Python 3 中是一個(gè)惰性的可迭代對(duì)象,那么 range 是不是迭代器呢?為什么。 TLNR:Python 3 中的 ran...

    draveness 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<