# 【Day16】forEach資料處理方法
###### tags: `JavaScript` `14th鐵人賽`
在陣列中,若需要訪問組數中的每個元素可以使用for迴圈完成,而本篇將介紹更有效的執行方式高階函式forEach進行資料處理。
- 陣列使用for迴圈索引值
- forEach介紹,使用方式
---
先說說什麼式高階函數(higher order function)
取自維基百科
在數學和計算機科學中,高階函數是至少滿足下列一個條件的函數:
* 接受一個或多個函數作為輸入
* 輸出一個函數
function是物件的一種,將他指定為變數,並帶入其他函式中,簡單說就是函數可以當作變數來用。
## 用for迴圈讀取陣列
```jsx
var dogs = ["芒狗", "奇異狗", "蘋狗"];
// 此時的i為全域變數
for (var i = 0; i < dogs.length; i++) {
dogs[i] += "是一種小狗";
let item = dogs[i];
console.log(item);
}
```
此時的`for loop` 可能會產生全域變數 在ES6後則可使用`let`及`const`來解決作用域的問題。
使用`forEach`時可以用更簡短的寫法達到相同的效果,以下將會介紹其寫法及注意內容。
## forEach
若同樣的情況使用`forEach`完成
```jsx
var dogs = ["芒狗", "奇異狗", "蘋狗"];
dogs.forEach(function(item) {
console.log(`${item}是一種小狗`);
});
```
### 語法使用
大多情況下較長使用到前兩個參數`item`、`index`
```jsx
let data = [data1,data2,data3];
data.forEach(function(item, index, array){
/*
依陣列資料長度決定function跑幾次 而其中參數名稱也可以作替換
item 值-取出陣列中的元素
index 索引-在陣列中的第幾筆資料
array 整個陣列內容
*/
console.log(item,index,array)
})
```
只能**從頭開始訪問每個元素**,若遇特定數值須中斷時可改用`for loop`讀取陣列並加上`break`
再使用三個參數的範例說明
```jsx
words = ["dog", "on", "carpet"];
words.forEach(function(word, num, all) {
console.log("Word " + num + " in " + all.toString() + " is " + word);
});
/*
Word 0 in dog,on,carpet is dog
Word 1 in dog,on,carpet is on
Word 2 in dog,on,carpet is carpet
*/
/*
word 取出陣列中的元素內容
num 取出陣列中的元素次序
all 整筆陣列內容
*/
```
## forEach也可以用return嗎?
`forEach()` 不返回任何內容,若嘗試使用`return`返回值,將得到`undefined`
```jsx
let a = [1, 2, 3];
a.forEach(function(item, index, array){
return item*2;
console.log(a);
});
```
下一篇將會介紹可以使用`return`並且不會改變原陣列的`map( )`若本篇介紹有任何問題歡迎指教~