當咱們須要遍歷一個數組時,第一個想到的就是for,而後用length去判斷條件,以後++,但着彷佛有些過於老套了。本文主要收集各類遍歷方法,主要針對數組,也會有關於對象、字符串的,看完它,你會對遍歷有一個新的認識。vue
const ArrayList = [ {name: '張三', age: 18}, {name: '李四', age: 20} ] const ObjectParams = { name: '孫曉萌', age: '19' } const StringParams = '女帝'
最傳統的for{.....}git
// 遍歷Array for (let i = 0; i < ArrayList.length; i++) { console.log(ArrayList[i]) } // 遍歷Object // 你會發現它並無走進這個for循環,由於ObjectParams.length === undefined for (let i = 0; i < ObjectParams.length; i++) { console.log(ObjectParams[i]) } // 遍歷String for (let i = 0; i < StringParams.length; i++) { console.log(StringParams[i]) }
全能了... 能夠遍歷數組、對象、字符串es6
for (let i in ArrayList) { console.log(ArrayList[i]) // i輸出爲index } for (let i in ObjectParams) { console.log(ObjectParams[i]) // i輸出爲key } for (let i in StringParams) { console.log(StringParams[i]) // i輸出爲index }
es6引入的github
<div class="reference">for...of語句在可迭代對象(包括 Array, Map, Set, String, TypedArray,arguments 對象等等)上建立一個迭代循環,對每一個不一樣屬性的屬性值,調用一個自定義的有執行語句的迭代掛鉤。。。for...of循環本質上就是調用這個接口產生的遍歷器. for...of</div>
for (let i of ArrayList) { console.log(i) } // 數組原生具有iterator接口(即默認部署了Symbol.iterator屬性),for...of循環本質上就是調用這個接口產生的遍歷器 ObjectParams[Symbol.iterator] = ArrayList[Symbol.iterator].bind(ArrayList) for (let i of ObjectParams) { console.log(i) // 輸出結果與直接遍歷ArrayList同樣,Object默認是不具有Symbol.iterator屬性的,所以沒法對Object用for of進行遍歷 } for (let i of StringParams) { console.log(i) }
數組特有... 不可break。 forEach()方法是ES5.1標準引入的。數組
ArrayList.forEach((item, index) => { console.log(item, index) // item當前下標對象 index下標 })
let i = 0 while (i < ArrayList.length){ console.log(ArrayList[i]) i++ } let j = 0 // 你會發現它並無走進這個while循環,由於ObjectParams.length === undefined while (j < ObjectParams.length){ console.log(ObjectParams[j]) j++ } let k = 0 while (k < StringParams.length){ console.log(StringParams[k]) k++ }
let i = 0 do { console.log(ArrayList[i]) i++ } while (i < ArrayList.length) let j = 0 do { console.log(ObjectParams) //會輸出 由於do while是先走do語句 j++ } // 你會發現它並無走進這個while循環,由於ObjectParams.length === undefined while (j < ObjectParams.length) let k = 0 do { console.log(StringParams[k]) k++ } while (k < StringParams.length)
數組特有... 不可breakspa
ArrayList.map((item, index) => { console.log(item, index) })
break 語句用於跳出循環。上述幾種方法中forEach和map不支持break..
continue 用於跳過循環中的一個迭代。 上述幾種方法中forEach和map不支持continue..code
遍歷數組用forEach、map(若是你不須要中斷它),須要中斷的話就選for...of吧
遍歷字符串for..of, for...in
遍歷對象for...inwhile和do while的區別
while先判斷條件,do while先執行一次再判斷條件。對象
源碼地址接口