---
# System prepended metadata

title: JavaScript - 陣列 forEach 資料處理方法
tags: [array, javascript, forEach]

---

# JavaScript - 陣列 forEach 資料處理方法
###### tags: `javascript` `array` `forEach`

## forEach 寫法介紹
* forEach(function(item, index, array){})
    * 參數1 item：陣列資料
    * 參數2 index：第 ○ 筆
    * 參數3 array：陣列
```javascript=
let data = [30, 40, 50, 60, 70, 80, 90];

// forEach 依序把每一筆資料讀取出來
//參數  //陣列資料 //第○筆 //陣列
data.forEach(function (item, index, array) {
    console.log(item, index, array);
})

// forEach 依序跑完整個陣列才會執行這行
console.log("end"); 
```

### 陣列數字累加
```javascript=
let data = [30, 40, 100, 200, 300];
// 為了成功累加，宣告變數 total 要放在外層
let total = 0;

data.forEach(function (item, index) {
    total += item;
    console.log(total); // 30 70 170 370 670
})

console.log(total); // 670
```

### 變數作用域講解
```javascript=
let data = [30, 40, 100, 200, 300];

data.forEach(function (item, index) {
    // 宣告變數 total 放在內層 -> 每執行一次 forEach 都會重新歸零，因此不會累加
    let total = 0;
    total += item;
    console.log(total); // 30 40 100 200 300
})

console.log(total); //因 total 宣告在內層，於外層讀取不到值
```

### 搭配 if，篩選出陣列裡面有幾個偶數
```javascript=
let data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let total = 0;
let newData = []; //整理成一個新陣列資料

data.forEach(function (item, index) {
    // console.log(item);
    if (item % 2 == 0) {
        total += 1; //計算共幾筆偶數
        newData.push(item);
    }
})

console.log(total); //顯示共幾筆偶數
console.log(newData); //觀察新陣列資料
```

### forEach 讀取資料
#### forEach 可讀取不同型別的資料
```javascript=
let data1 = [11, "hello", true];

data1.forEach(function (item, index) {
    console.log(item); //11 hello true    
})
```
#### forEach 讀取物件型別資料
```javascript=
let data2 = [
    {
        name: "Tom",
        sex: "male"
    },
    {
        name: "Tina",
        sex: "female"
    }
]

data2.forEach(function (item, index) {
    console.log(item, index); //{name: "Tom",sex: "male"}

    // 物件取值的方式
    console.log(item.name); //Tom
    console.log(item.sex); //male
})
```

### 透過物件整合資料-男女人數計算機
```javascript=
let data = [
    {
        name: "Tom",
        sex: "male"
    },
    {
        name: "Tina",
        sex: "female"
    },
    {
        name: "Jay",
        sex: "male"
    },
    {
        name: "Jason",
        sex: "male"
    },
    {
        name: "Mia",
        sex: "female"
    },
    {
        name: "Jane",
        sex: "female"
    },
]

// 宣告變數
// let femaleTotal = 0;
// let maleTotal = 0;

// 改用物件資料紀錄
let peopleTotal = {
    female: 0,
    male: 0
}

data.forEach(function (item, index) {
    console.log(item.sex);
    if (item.sex == "female") {
        peopleTotal.female += 1;
    } else {
        peopleTotal.male += 1;
    }
})

console.log(peopleTotal); // {female: 3, male: 3}
console.log(peopleTotal.female); // 3
console.log(peopleTotal.male); // 3
```