---
# System prepended metadata

title: JS Chapter5_陣列與物件應用
tags: [JS鐵人賽]

---

# JS Chapter5_陣列與物件應用
###### tags: `JS鐵人賽`
## 陣列與物件A合格式
相同資料使用陣列整理；各筆資料的細部資訊用物件描述

    兩個水果攤
    第一個水果攤老闆叫Tom，香蕉有6個，蘋果有5個，還沒打烊
    第二個水果攤老闆叫John，香蕉有9個，蘋果有8個，還沒打烊
    
```javascript=
let market = 
    {
        bossName : 'Tom',
        banana : 6,
        apple : 5,
        isClose : false,
    }
    ,
    {
        bossName : 'John',
        banana : 9,
        apple : 8,
        isClose : false,
    }
];

console.log(market)

```

## 陣列與物件混合讀取

*    矩陣讀取用  [數字]
*    物件讀取用  .物件名稱
  
```javascript=
console.log(market[0].apple);
```

## 物件包物件
```javascript=
let home = {
    dogs: 3,
    motherStatus:{
        age: 30,
        name: 'Mary'
    },
    dadStatus:{
        age: 31,
        name: 'Gary'
    },
};

console.log(home.dadStatus.age);

```

## JSON格式
各種資料庫設計格式不一樣，但同樣都用Json格式傳遞資料，使用檢視網頁原始碼複製JSON資料庫，有時候物件內會包**陣列**，或物件包**物件**

高雄市政府開放資料
https://data.kcg.gov.tw/dataset?res_format=JSON

    如何判斷資料性質為何？
    看最外圍是[] OR {}

*    物件資料
![](https://i.imgur.com/tpyd7mL.png =400x)
    
*    陣列資料

![](https://i.imgur.com/I2PFkYN.png =400x)

### 篩選自己想要的資料格式，並賦予至特定變數

```javascript=

// let 變數 = 指定資料
// 以第一張圖為例
let ary = data.entries;

```
## 陣列物件搭配if流程判斷
![](https://i.imgur.com/lvlZXvn.png =400x)
    
    這邊使用的方法為取得第一筆資料的處理方式
    若有數筆資料則會使用更快的方式，但背後的運作邏輯就是這樣

```javascript=
let peopleStatus = [
    {
        name: 'Tom',
        age: 18,
        status: '',
    },
    {
        name: 'Rose',
        age: 25,
        status: '',
    },
]

peopleStatus[0].degree = 39;
console.log(peopleStatus[0]);
if (peopleStatus[0].degree>=37.5){
    peopleStatus[0].status = '您不得進入';
    console.log(peopleStatus[0].status);
}else{
    peopleStatus[0].status = '歡迎進入';
    console.log(peopleStatus[0].status);
}

console.log(peopleStatus[0]);
```

## 陣列for each資料處理方法

### 為什麼要學陣列資料處理
>* 大量處理陣列資料
>* 判斷資料是否可用

### forEach寫法介紹
>* item：取出矩陣值
>* index：矩陣位置
>* array：所處的矩陣結構
>* function執行次數端看矩陣數量而定，如果陣列內只有一筆則跑一次，兩筆則跑兩次
>* forEach跑function會自動將矩陣值代入參數
>* 可以自訂參數名稱
```javascript=
變數.forEach(function(item,index,array){
    
}) 

//未使用到的參數可直接忽略不寫，例如不會用到array，則：
變數.forEach(function(item,index){
    
}) 

```

```javascript=
// 此範例function會跑三次才離開forEach

let data = [30,40,50];
data.forEach(function(item,index,array){
    console.log(item,index,array);
})

console.log('hello');

```

### 陣列數字累加與變數作用域

>正確示範

```javascript=
let data = [30,40,50];
let total = 0;

data.forEach(function(item){
    total += item;
})
console.log(total);
```

>錯誤示範
>>在function內設定的變數非全域變數，因此執行一次function後數值會歸零
```javascript=
let data = [30,40,50];

data.forEach(function(item){
    let total = 0;
    total += item;
})
console.log(total);
```

### 搭配if，篩選出陣列內有幾個偶數
```javascript=
let data = [30,40,100,33333,555566];
let total = 0;

// 設定一個變數為空矩陣，以便後續重新篩選資料
let newData = [];

data.forEach(function(item,index){
    if(item%2 ==0){
    total+=1;
    
    // 將通過條件的值賦予至newData空矩陣
    newData.push(item);
    }
})
console.log(total);
console.log(newData);

```


### forEach vs for迴圈
https://wcc723.github.io/development/2020/10/05/js-for-loop-vs-for-each/

### forEach讀取資料
利用forEach讀取矩陣當中的物件資料
```javascript=
let data = [
    {
        name:'Tom',
        sex:'male'
    },
    {
        name:'Mary',
        sex:'woman'
    }
];

data.forEach(function(item,index){
    console.log(item.name,item.sex);
})
```
### 男女人數計算機－透過物件整合資料
```javascript=
let data = [
    {
        name:'Tom',
        sex:'male'
    },
    {
        name:'Mary',
        sex:'woman'
    },
    {
        name:'Tom',
        sex:'male'
    },
    {
        name:'Mary',
        sex:'woman'
    },
    {
        name:'Tom',
        sex:'male'
    },
    {
        name:'Mary',
        sex:'woman'
    }
];

let people ={
    maleTotal:0,
    femaleTotal:0
};

data.forEach(function(item){
    if(item.sex == 'woman'){
        people.maleTotal+=1
    }else{
        people.femaleTotal+=1
    }
})
console.log(people);
 
```

### 輕軌運量資料處理
```javascript=


```