流程控制、迴圈

for 語句 (拆開一層陣列)

多個表達式也是可以的

for (let count = 0, total = 30 ; 
count < 10 && total > 20 ; 
count++, total--){
    console.log(count, total)
}

//較差的寫法
for (let i=0 ; i < aArray.length ; i++) {
  //statment
}

//較好的寫法
for (let i=0, len = aArray.length ; i < len; i++) {
  //statment
}

for...in 語句(單物件內部屬性使用)

for...of 語句(陣列內是物件)

for...of語句是新的ES6語句,可以用於可迭代物件上,取出其中的值,可迭代物件包含陣列、字串、Map物件、Set物件等等。

forEach

用於陣列,且可使用 value, index, array 參數。無回傳值。

用Object.keys取物件的key值轉為陣列,然後加上使用 forEach 方法

map (映射)

是比較常被使用的迭代方法,由於它並不會改變輸入陣列(呼叫map的陣列)的成員值,所以並不會產生副作用,最後回傳符合條件的新陣列

reduce (歸納)

藉由一個回調(callback)函式,來作前後值兩相運算,然後不斷縮減陣列中的成員數量,最終回傳一個值。 參數包含以下:

  • accumulator: 前一個參數,如果是第一個陣列的話,值是以另外傳入或初始化的值

  • currentValue: 當前變數

  • currentIndex: 當前索引

  • array: 全部陣列

過濾與搜尋 filter 與 find/findIndex

filter(過濾)將陣列值進行過濾,最後回傳符合條件的新陣列

find與findIndex方法都是在搜尋陣列值用的, find在尋找到符合條件時會回傳值(value) findIndex則是回傳符合條件的索引值(index)

Array.prototype.find()

find() 與 filter() 很像,但 find() 只會回傳一次值,且是第一次為 true 的值。

常用於查詢是否有此值在陣列中

Array.prototype.every()

every() 可以檢查陣列是否符合所有條件,這僅會回傳一個值 true or false,可以用來檢查陣列中的內容是否符合特定條件。

Array.prototype.some()

some() 與 every() 非常接近,都是回傳 true or false,差異僅在 every() 需完全符合,some() 僅需要部分符合。

Last updated

Was this helpful?