詳解JS中常用的循環和遍歷


1,循環

循環,就是根據某個條件,重復執行一段代碼

1.1,for循環

語法:

for (1 聲明循環變量; 2 判斷循環條件; 3 更新循環變量) { // 4 要執行的代碼塊 } // 執行順序 1 -> 2 -> 4 -> 3 

例子:

for(let i = 0; i < 10; i++) { console.log(i) // 輸出 0 ~ 9 } // 或者 for(let i = 0; i < 10 && i != 5; i++) { console.log(i) // 輸出 0 ~ 4 } // 或者 for(let i = 0; i < 0 || i < 6; i++) { console.log(i) // 輸出 0 ~ 5 } 

注意:

  • for循環有三個表達式:1:聲明循環變量;2:判斷循環條件;3:更新循環變量。三個表達式之間,用;符號分割,表達式都可以省略,但是兩個;符號缺一 不可

  • for循環是先判斷再執行,與while循環相同

  • for循環的三個表達式都可以有多部分組成,多個判斷條件用&&||連接

for循環嵌套

例子:

// 99乘法表 for (let i = 1;i < 10; i++) { let arr = [] for (let k = 1;k < 10; k++) { arr.push(`${i}x${k}=${i * k}`) } console.log(arr) } 

1.2,while循環

語法:

while (條件) { 要執行的代碼塊 } 

例子:

let num = 0 while (num < 10){ console.log(num) num++ } // 輸出 0 ~ 9 

注意:

  • while循環會一直循環代碼塊,只要指定的條件為true,所以不要忘記對條件中使用的變量進行遞增

1.3,do while循環

語法:

do { 要執行的代碼塊 } while (條件); 

例子:

let i = 6 do { console.log(i) i++ } while (i < 5) 

注意:

  • do while循環是while循環的變體。它會先執行一次代碼塊。之后再判斷條件,只要條件為真就會重復循環

  • 該循環至少會執行一次,即使條件為false

1.4,跳出循環

有時候需要跳過一次循環或者是終止整個循環

continue

跳過循環中的一個迭代

例子:

for (i = 0; i < 5; i++) { if (i === 3) { continue } console.log(i) } // 輸出 0 1 2 4 

注意:

  • for循環中,continue之后執行的語句,是循環變量更新語句i++

  • whiledo while循環中,continue之后執行的語句,是循環條件判斷,必須將continue放到i++之后使用,否則continue將跳過i++進入死循環

break

跳出並終止整個循環

例子:

for (i = 0; i < 5; i++) { if (i === 2) { break } console.log(i) } 

注意:

  • 如果循環有多層,則break只能跳出一層

二,遍歷

遍歷,是指沿着某條搜索路線,依次對數據中每個節點均做一次訪問

2.1,for in

for...in語句用於對數組或者對象的可枚舉屬性進行循環操作,可用break或者throw跳出

語法:

// '變量'用來指定變量,指定的變量可以是數組元素,也可以是對象的屬性 for (變量 in 對象) { 在此執行代碼 } 

例子:

let obj = { name: '張三', age: 18 } let arr = ['a', 'b', 'c'] for (let i in obj) { console.log(i) } // 輸出 name age for (let i in arr) { console.log(i) } // 輸出 0 1 2 

2.2,for of

for...of語句在可迭代對象上創建一個迭代循環,調用自定義迭代鈎子,並為每個不同屬性的值執行語句(包括ArrayMapSetStringTypedArrayarguments對象等等,不包括Object),可用break或者throw跳出

語法:

for (variable of 可迭代對象) { // 操作語句 } 

例子:

let arr = ['a', 'b', 'c'] let obj = { name: '張三', age: 18, sex: '男' } for (let i of arr) { console.log(i) } // 輸出 a b c for (let i of obj) { console.log(i) } // 報錯 obj is not iterable (obj不是可迭代的) 

2.3,forEach

按升序為數組中含有效值的每一項執行一次給定的函數,那些已刪除或者未初始化的項將被跳過(比如[1,,2]),如果需要中斷,請使用try/catch配合throw

語法:

array.forEach(callback(currentValue, index, array)) 

例子:

let arr = ['a', 'b', 'c'] arr.forEach((item, index) => { console.log(`值:${item} 下標${index}`) }) // 輸出 值:a下標:0 值:b下標:1 值:c下標:2 

終止循環:

try { arr.forEach((item, index) => { if (index === 1) { throw '終止' } console.log(`值:${item}下標:${index}`) }) } catch (error) { console.log(error) } // 輸出 值:a下標:0 終止 

2.4,map

數組遍歷,返回一個新數組,數組中的元素為原始數組元素調用函數處理后的值

語法:

array.map(function(currentValue,index,arr), thisValue) 

例子:

let arr = [0, 1, 2, 3, 4, 5] let val = arr.map((item => { return item + 10 })) console.log(val) // 輸出 [10, 11, 12, 13, 14, 15] 

2.5,filter

數組遍歷,返回一個新數組,其包含通過所提供函數實現的測試的所有元素

語法:

let newArray = arr.filter(callback(element, index, array), thisArg) 

例子:

let arr = [0, 1, 2, 3, 4, 5] function fn(e) { return e - 2 > 1 } let arr2 = arr.filter(fn) console.log(arr2) // 輸出 [3, 4, 5] 

2.6,keys()

對象遍歷,返回一個數組,其元素包括對象自身的(不含繼承的)所有可枚舉屬性(不含Symbol屬性)的鍵名,不會返回原型上的方法

語法:

Object.keys(obj) 

例子:

let obj = { name: '張三', age: 18, sex: '男' } console.log(Object.keys(obj)) // 輸出 ["name", "age", "sex"] 

2.7,values()

對象遍歷,返回一個由目標對象value組成的數組,其元素是在目標對象上找到的可枚舉屬性值

語法:

Object.values(obj) 

例子:

let obj = { name: '張三', age: 18, sex: '男' } console.log(Object.keys(obj)) // 輸出 ["張三", 18, "男"] 

如果看了覺得有幫助的,我是@鵬多多11997110103,歡迎 點贊 關注 評論;
END



作者:鵬多多11997110103
鏈接:https://www.jianshu.com/p/004f7521b812
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM