紀錄各種迴圈的用法。
前言
JS常常需要針對 陣列(Array)、物件(Object) 這二種資料進行分析及修改,
故整理下列幾種方法,
單純遍歷陣列元素
- for
- forin
- forEach
判斷是否符合資格
- every:遍歷每個元素判斷是否皆符合條件,若其一不符,就回傳
false
- some: 遍歷每個元素判斷是否皆符合條件,若其一符合,就回傳
true
- every:遍歷每個元素判斷是否皆符合條件,若其一不符,就回傳
產生新的陣列
- map:遍歷每個元素,進行 加工、校正
- filter:遍歷每個元素,保留符合條件(true)的值,不符合,則去除掉。
- reduce:遍歷每個元素,依序組合、加總,然後丟給下個元素,最終會回傳一個結果。
for
最常見的用法,不多加說明。
範例
1 | let arr = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |
forin
可傳入 objec
或 array
型態的資料。
範例
1 | var arr = ["zero","one","two"]; |
1 | var obj = {a: 1, b: 2, c: 3}; |
forEach
可用來取代 for
的寫法,讓程式碼更簡短,省略掉定義 i
、arr.length
…等動作。
語法
1 | arr.forEach( callback(currentValue, index, array){ |
callback
- currentValue(常用):原陣列目前所迭代處理中的元素。
- index(選用):原陣列目前處理中的元素之索引。
- array(選用):呼叫 forEach() 方法的陣列。
範例
1 | const arr = ['a', 'b', 'c']; |
1 | const arr = ['a', 'b', 'c']; |
every
對每個陣列元素判斷是否皆符合條件,若其一不符,就回傳 false
語法
1 | arr.every( callback(currentValue, index, array){ |
callback
- currentValue(常用):原陣列目前所迭代處理中的元素。
- index(選用):原陣列目前處理中的元素之索引。
- array(選用):呼叫 every() 方法的陣列。
範例
1 | function isBigEnough(element, index, array) { |
some
對每個陣列元素判斷是否皆符合條件,若其一符合,就回傳 true
語法
1 | arr.some( callback(currentValue, index, array){ |
callback
- currentValue(常用):原陣列目前所迭代處理中的元素。
- index(選用):原陣列目前處理中的元素之索引。
- array(選用):呼叫 some() 方法的陣列。
範例
1 | function isBiggerThan10(element, index, array) { |
map
可對每個陣列元素進行 加工、校正 的處理,最後回傳一個 新的陣列。
原先的陣列與後來新產生出的陣列,個數(Array.length) 會一樣多。
語法
1 | arr.map( callback(currentValue, index, array){ |
callback
- currentValue(常用):原陣列目前所迭代處理中的元素。
- index(選用):原陣列目前處理中的元素之索引。
- array(選用):呼叫 map() 方法的陣列。
範例1
1 | var myArr = [ 1, 2, 3 ]; |
範例2
1 | var myArr = [ 1, 20, 3, 40, 50, 6, 7, 80, 9, 10 ]; |
filter
遍歷每個元素,保留符合條件(true)的值,不符合,則去除掉。
原先的陣列與後來新產生出的陣列,個數(Array.length)可能不一樣多。
語法
1 | arr.filter( callback(currentValue, index, array){ |
callback
- currentValue(常用):原陣列目前所迭代處理中的元素。
- index(選用):原陣列目前處理中的元素之索引。
- array(選用):呼叫 filter() 方法的陣列。
範例
1 | var myArr = [ 1, 20, 3, 40, 50, 6, 7, 80, 9, 10 ]; |
reduce
遍歷每個元素,依序組合、加總,然後丟給下個元素,最終會回傳一個結果。
語法
1 | arr.reduce( callback(accumlator, currentValue, index, array){ |
callback
- accumulator(常用):用來累積回呼函式回傳值的累加器。
- currentValue(常用):原陣列目前所迭代處理中的元素。
- index(選用):原陣列目前所迭代處理中的元素之索引。
- array(選用):呼叫 reduce() 方法的陣列。
initialValue(常用):於第一次呼叫 callback 時要傳入的累加器初始值。
範例1
注意reduce第二個參數 0
, 代表的意思是開始執行遍歷前的初始值。
1 | var myArr = [ 1, 2, 3 ]; |
範例2
注意此次沒有設定reduce第二個參數, 此時就會自動抓取陣列第一個元素當作初始值。
1 | var myArr = [ 1, 2, 3 ]; |
範例3
除了一般數字的加總,也可配合判斷式,最終產出一個新的陣列。
1 | let source = ["Kanboo", "Jack", "Rabbit", "Lucas", "Jack", "Lucas", "Rabbit"]; |