# 第五堂:陣列方法與資料處理 * 記得錄影 ## 陣列方法 * typeof:查詢型別 * include:判斷元素是否存在 ``` const fruits = ["apple", "banana", "cherry"]; // 檢查是否包含某個水果 if (fruits.includes("banana")) { console.log("清單裡有香蕉!"); } else { console.log("清單裡沒有香蕉!"); } ``` ``` const purchasedMemberNames = ["Alice", "Bob", "Charlie", "Hannah"]; // 檢查某會員是否已購買課程 function hasPurchased(name) { if (purchasedMemberNames.includes(name)) { console.log(`${name} 已購買課程。`); } else { console.log(`${name} 尚未購買課程。`); } } // 測試用例 hasPurchased("Alice"); // Alice 已購買課程。 hasPurchased("Diana"); // Diana 尚未購買課程。 ``` ## forEach 用來遍歷陣列元素的方法 * 基本用法 ```javascript [1,2,3,4,5].forEach(function(item){ console.log(item); }); // 1 // 2 // 3 // 4 // 5 ``` * 語法參數講解 ```javascript let data = [3,30,100]; data.forEach(function(item,index,ary){ console.log(item,index,ary); }); ``` 使用範例: * forEach 陣列數字累加 ```javascript let data = [3,30,100]; let total=0; data.forEach(function(item){ total+=item; }); ``` * forEach 物件裡面的數字累加 ```javascript let data = [ { num: 10 }, { num: 30 }, { num: 100 } ]; let total = 0; data.forEach(function(item){ total+=item.num; }); ``` * forEach + if * [男生共有幾位?](https://codepen.io/hexschool/pen/yLVGWpx?editors=1010) * [國中人數共有幾位?](https://codepen.io/hexschool/pen/vYbXbMB?editors=0010)、[資料集](https://data.tainan.gov.tw/dataset/junior-number/resource/4f56ba22-0b13-4570-8be6-2d66483ffa5f) * [高雄里長黨派各有幾位?](https://codepen.io/hexschool/pen/BaMLMez?editors=0010)、[資料集](https://cabu4.kcg.gov.tw/KcgRegion/OpenData/%E9%87%8C%E9%95%B7%E9%80%9A%E8%A8%8A%E9%8C%84.JSON) ## filter 用來依照條件「篩選」陣列元素,並回傳「符合條件」的新陣列的方法 * 基本用法 ```javascript [1,2,3,4,5].filter(function(item){ return item > 3; }); // 回傳新陣列: [4,5] ``` ### filter 取出物件裡面 num 大於 30 的項目 ``` let data = [ { num: 10 }, { num: 30 }, { num: 100 } ]; let filteredData = data.filter(function(item){ return item.num > 30; }); // 會得到 [{ num: 100 }] ``` * filter 只會回傳符合「return 條件」的那些元素組成的新陣列,原陣列不會被修改。 * 回傳 true 表示保留該元素,false 表示過濾掉該元素。 * 與 forEach 不同的地方在於,filter 在遍歷陣列的同時,能夠有選擇地「回傳」符合條件的元素。 | 比較項目 | forEach | filter | |:-----------:|:----------------------------------------------------------|:---------------------------------------------------------------------------------------------| | **目的** | 主要用於「遍歷」(iteration)陣列中的每個元素 | 主要用於「篩選」符合特定條件的元素,並回傳篩選後的新陣列 | | **回傳值** | 沒有回傳值 (`undefined`),不會自動產生新陣列 | 會回傳一個新陣列,裡面包含所有符合回傳條件 (`return true`) 的元素 | | **原陣列是否改變** | 不會改變原陣列 | 不會改變原陣列 | | **常見用法** | - 陣列元素遍歷<br>- 執行累加或副作用(例如:計算總和、印出) | - 根據條件過濾<br>- 取得符合條件的子集合 | ## 第三週主線任務:樂呵呵健身房 * [任務列表](https://rpg.hexschool.com/#/training/12062543649527256883/board/content/12062543649527256884_12062543649527256902) ## 下週二建議預習章節 * [V8、Node.js介紹](https://courses.hexschool.com/courses/2025-node-js/lectures/58664132) * [Node 模組原理](https://courses.hexschool.com/courses/2025-node-js/lectures/58664139) * [NPM](https://courses.hexschool.com/courses/2025-node-js/lectures/58664150)