---
# System prepended metadata

title: forEach
tags: [forEach]

---

---
title: forEach
tags: forEach,
description:
---
forEach
===

**forEach**會把**陣列**資料==一筆一筆取出==，代入參數後去做處理運算。
- 代入參數順序分別是```item```、```index```、```array```,名稱可自行定義。
```javascript=
let data = [1, 2, 3,];
data.forEach(function(item, index, array){
    console.log(item, index, array);
})

// 1 0 (3) [1, 2, 3]
// 2 1 (3) [1, 2, 3]
// 3 2 (3) [1, 2, 3]
```
- 箭頭函式寫法
```javascript=
let data = [1, 2, 3,];
data.forEach((item, index, array) => {
    console.log(item, index, array);
});
```

:::info
**這邊需要特別提醒，在 `forEach()` 函式內用 return 是無效的。除非程式碼有誤，否則並沒有中止 `forEach()` 的辦法**
:::

```javascript=
let data = ["a", "b", "c"];

data.forEach(function(item, index, array){
  console.log(item, index, array);
  // 程式碼會忽略這個 return
  return
})
```
<br>


### 陣列數字累加、forEach參數作用域
- 每次進行forEach取出陣列``data``的item做累加
- 每次進行forEach完成，會把**大括號**的資料清除，所以用來累加的``total``不會放在大括號內。（forEach大括號內找不到total，會==向外層尋找==）
- 
```javascript=
let data = [10, 20, 30,];

let total = 0;

data.forEach(function(item, index) {
  total += item;
});

console.log(total);    // 60
```
<br>

### 搭配if，篩選陣列有幾個偶數
- 把陣列``data``內的偶數取出，加入到陣列``evenArray``內，並檢查共幾個偶數。

```javascript=
let data = [7, 22, 39, 46, 56, 62, 73];
let evenArray = [];    //賦予空陣列

// 把陣列的值一一取出判斷是否為偶數，為偶數就push到陣列evenArray內
data.forEach(function(item, index) {
  item % 2 ?  '' : evenArray.push(item); 
});
console.log(evenArray.length);
```
<br>

### forEach讀取資料
- 把陣列``data``內的物件資料一一取出，把姓名、性別資料呈現出來
```javascript=
let data = [
  {
    name: 'tom',
    sex: 'male',
  },
  {
    name: 'mary',
    sex: 'female',
  }
];
data.forEach(function(item, index) {
  console.log(`${item.name}的性別是${item.sex}`);
});

// tom的性別是male
// mary的性別是female
```
<br>

### 男女生人數計算
把變數``data``的資料用``forEach``分析
- 用一個物件存放下列取得的資料
  - 計算男生/女生人數分別是多少人？
  - 把男生/女生的姓名分別存放在兩個陣列內。
```javascript=
let data = [
  {
    name: 'tom',
    sex: 'male',
  },
  {
    name: 'mary',
    sex: 'female',
  },
  {
    name: 'judy',
    sex: 'female',
  },
  {
    name: 'jane',
    sex: 'female',
  },
  {
    name: 'john',
    sex: 'male',
  }
];
let people = {
  male: 0,
  female: 0,
  maleNameList: [],
  femaleNameList: [],
};
data.forEach(function(item, index) {
  if (item.sex === 'male') {
    people.male += 1;
    people.maleNameList.push(item.name);
  } else if (item.sex === 'female') {
    people.female += 1;
    people.femaleNameList.push(item.name);
  }
});
console.log(people);
```
![](https://i.imgur.com/ixlthSj.png)
<br>

