陣列 forEach 資料處理方法
為什麼要學陣列資料處理?
陣列 – 資料處理
forEach 寫法介紹
// all.js
// forEach
// 其中一種陣列資料處理的方法
// 只有陣列才能使用
// 函式參數預設會帶 item, index, ary 三個參數
// item 物件(值)
// index 索引(第幾筆資料)
// ary 全部陣列
// 第一個參數為當下陣列的值
// 第二個參數為迭代資料的索引值
// 第三個參數為執行的陣列本身
let data = [30, 40];
data.forEach(function(item, index, array) {
console.log(item, index, array);
})
console.log("以上資料全部執行完成");
陣列數字累加與變數作用域講解
// all.js
// forEach 常見用法
let data = [30, 40, 100];
// 全域變數
// let total = 0;
data.forEach(function(item, index) {
// 區域變數 - 變數只會在函式內執行
// let total = 0;
total += item;
console.log(total);
})
console.log(total);
搭配 if,篩選出陣列裡面有幾個偶數
// all.js
// 判斷陣列裡面有幾個偶數
let data = [30, 40, 100, 33333, 555596];
// 宣告變數 total 來儲存偶數數量
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 讀取資料
// all.js
// 讀取陣列資料: 字串、物件、陣列
let data = [
{
name: "Tom",
sex: "male"
},
{
name: "Mary",
sex: "female"
}
]
data.forEach(function(item, index) {
console.log(item);
console.log(item.name, item.sex);
})
男女人數計算機 – 透過物件整合資料
// all.js
// 計算男女生的總數
let data = [
{
name: "Tom",
sex: "male"
},
{
name: "Mary",
sex: "female"
},
{
name: "Jane",
sex: "female"
},
{
name: "Jenny",
sex: "female"
},
{
name: "Joan",
sex: "female"
}
]
// 方式一
let maleTotal = 0;
let femaleTotal = 0;
// 方式二
let people = {
male: 0,
female: 0
};
data.forEach(function(item, index) {
// console.log(item.sex);
if(item.sex == "female") {
// console.log("是女生");
femaleTotal += 1;
people.female += 1;
} else {
// console.log("是男生");
maleTotal += 1;
people.male += 1;
}
})
console.log(femaleTotal, maleTotal);
console.log(people);
高雄 OPEN DATA – 觀看免費與投幣式充電站有幾處
// all.js
// 高雄公共充電站
let data = [{},{},{},...{}];
// console.log(data);
// console.log(data.length);
let total = {
free: 0,
paid: 0
}
data.forEach(function(item, index) {
// console.log(item);
// console.log(item.Charge);
// console.log(item.Charge == "免費");
if(item.Charge == "免費") {
total.free += 1;
} else if(item.Charge == "投幣式") {
total.paid += 1;
}
})
// console.log(total);
console.log(`高雄充電站免費的站有${total.free}處`);
console.log(`高雄充電站投幣式站有${total.paid}處`);
高雄 OPEN DATA – 陣列物件處理
// all.js - 1
// 目的:懂得整合資料、處理資料
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
let total = {
free: [],
paid: []
}
data.forEach(function(item, index) {
// console.log(item.Charge == "免費");
if(item.Charge == "免費") {
// console.log("是免費的");
total.free.push(item);
} else if(item.Charge == "投幣式") {
total.paid.push(item);
}
})
// console.log(total);
console.log(`目前免費充電站有${total.free.length}處`);
console.log(`目前投幣式充電站有${total.paid.length}處`);
// all.js - 2
// 自我練習
let data = [{}, {}, {},...{}];
// console.log(data);
// console.log(data.length);
let total = {
free: [],
paid: []
}
data.forEach(function(item, index) {
// console.log(item.Charge == "免費");
if(item.Charge == "免費") {
// console.log("這是免費");
total.free.push(item);
} else if(item.Charge == "投幣式") {
// console.log("這是投幣式");
total.paid.push(item);
}
})
// console.log(total);
// console.log(total.free);
// console.log(total.paid);
console.log(`目前免費充電站有${total.free.length}處`);
console.log(`目前投幣式充電站有${total.paid.length}處`);
forEach 題型練習
範例功能講解
// index.html - 充電站 Code 範例
<h2>新增資料</h2>
<input type="text" placeholder="充電站名稱" class="stationName">
<select class="stationCharge">
<option value="免費">免費</option>
<option value="投幣式">投幣式</option>
</select>
<input type="button" class="btn" value="儲存">
<h2>資料顯示</h2>
<div class="filter">
<input type="button" value="全部">
<input type="button" value="免費">
<input type="button" value="投幣式">
</div>
<ul class="list">
</ul>
all.js - 充電站 Code 範例
let data = [
{
Charge:"免費",
name:"廖洧杰充電站"
}, {
Charge: "投幣式",
name: "小花充電站"
}, {
Charge: "投幣式",
name: "小明充電站"
}, {
Charge: "投幣式",
name: "小天充電站"
}
];
const list = document.querySelector('.list');
// 預設載入函式
function init(){
let str = "";
data.forEach(function (item, index) {
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
list.innerHTML = str;
}
init();
// 篩選器邏輯
const stationFilter = document.querySelector(".filter");
stationFilter.addEventListener("click",function(e){
if (e.target.value == undefined){
return ;
}
let str = "";
data.forEach(function(item,index){
if (e.target.value == "全部"){
str += `<li>${item.name},${item.Charge}</li>`
}else if (e.target.value == item.Charge){
str+=`<li>${item.name},${item.Charge}</li>`
}
})
list.innerHTML = str;
})
// 新增邏輯
const stationName = document.querySelector(".stationName");
const stationCharge = document.querySelector(".stationCharge");
const btn = document.querySelector(".btn");
btn.addEventListener("click",function(e){
console.log(stationName.value);
console.log(stationCharge.value);
let obj = {};
obj.Charge = stationCharge.value;
obj.name = stationName.value;
data.push(obj);
init();
stationCharge.value ="免費";
stationName.value = "";
})
練習的內容有
如何整合 innerHTML 資料
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<ul class="list">
<li>xx充電站,免費</li>
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js
// forEach 搭配 DOM 經過整合後,把資料顯示在網頁上
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
const list = document.querySelector(".list");
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
搭配網頁初始化狀態
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<ul class="list">
<li>xx充電站,免費</li>
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
// 預設載入函式 - 網頁初始化狀態
function init() {
const list = document.querySelector(".list");
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
}
init();
免費與投幣式事件監聽設計
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<!-- 免費與投幣式事件監聽設計 -->
<div class="filter">
<input type="button" value="免費">
<input type="button" value="投幣式">
</div>
<ul class="list">
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js
// 搭配網頁初始化狀態
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
// 預設載入函式 - 網頁初始化狀態
function init() {
const list = document.querySelector(".list");
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
}
init();
// 免費與投幣式事件監聽設計
const stationFilter = document.querySelector(".filter");
// console.log(stationFilter);
stationFilter.addEventListener("click", function(e) {
// console.log(e);
// 取值
// console.log(e.target.value);
// 判斷是否有點擊到按鈕
// console.log(e.target.value == undefined);
if(e.target.value == undefined) {
console.log("你點擊到空的地方");
// 回傳、強制中斷
return;
}
console.log(e.target.value);
})
事件監聽搭配 if 流程判斷
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<!-- 免費與投幣式事件監聽設計 -->
<div class="filter">
<input type="button" value="免費">
<input type="button" value="投幣式">
</div>
<ul class="list">
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
// 預設載入函式 - 網頁初始化狀態
function init() {
const list = document.querySelector(".list");
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
}
init();
// 免費與投幣式事件監聽設計
const stationFilter = document.querySelector(".filter");
// console.log(stationFilter);
stationFilter.addEventListener("click", function(e) {
// console.log(e);
// 取值
// console.log(e.target.value);
// 判斷是否有點擊到按鈕
// console.log(e.target.value == undefined);
if(e.target.value == undefined) {
console.log("你點擊到空的地方");
// 回傳、強制中斷
return;
}
// console.log(e.target.value);
let str = "";
data.forEach(function(item, index) {
// console.log(item.Charge);
// console.log(e.target.value == item.Charge);
if(e.target.value == item.Charge) {
str += `<li>${item.name},${item.Charge}</li>`
}
})
// console.log(str);
const list = document.querySelector(".list");
list.innerHTML = str;
})
DOM 拉出全域變數進行管理
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<!-- 免費與投幣式事件監聽設計 -->
<div class="filter">
<input type="button" value="免費">
<input type="button" value="投幣式">
</div>
<ul class="list">
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
// DOM 拉出全域變數進行管理
const list = document.querySelector(".list");
// 預設載入函式 - 網頁初始化狀態
function init() {
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
}
init();
// 免費與投幣式事件監聽設計
const stationFilter = document.querySelector(".filter");
// console.log(stationFilter);
stationFilter.addEventListener("click", function(e) {
// console.log(e);
// 取值
// console.log(e.target.value);
// 判斷是否有點擊到按鈕
// console.log(e.target.value == undefined);
if(e.target.value == undefined) {
console.log("你點擊到空的地方");
// 回傳、強制中斷
return;
}
// console.log(e.target.value);
let str = "";
data.forEach(function(item, index) {
// console.log(item.Charge);
// console.log(e.target.value == item.Charge);
if(e.target.value == item.Charge) {
str += `<li>${item.name},${item.Charge}</li>`
}
})
// console.log(str);
list.innerHTML = str;
})
篩選條件增加流程
// index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<!-- 免費與投幣式事件監聽設計 -->
<div class="filter">
<input type="button" value="全部">
<input type="button" value="免費">
<input type="button" value="投幣式">
</div>
<ul class="list">
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
// DOM 拉出全域變數進行管理
const list = document.querySelector(".list");
// 預設載入函式 - 網頁初始化狀態
function init() {
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
}
init();
// 免費與投幣式事件監聽設計
const stationFilter = document.querySelector(".filter");
// console.log(stationFilter);
stationFilter.addEventListener("click", function(e) {
// console.log(e);
// 取值
// console.log(e.target.value);
// 判斷是否有點擊到按鈕
// console.log(e.target.value == undefined);
if(e.target.value == undefined) {
console.log("你點擊到空的地方");
// 回傳、強制中斷
return;
}
// console.log(e.target.value);
let str = "";
data.forEach(function(item, index) {
// console.log(item.Charge);
// console.log(e.target.value == item.Charge);
if(e.target.value == "全部") {
str += `<li>${item.name},${item.Charge}</li>`
} else if(e.target.value == item.Charge) {
str += `<li>${item.name},${item.Charge}</li>`
}
})
// console.log(str);
list.innerHTML = str;
})
新增充電站 UI 介面邏輯新增
// index.html - 1
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<h2>新增資料</h2>
<input type="text" class="stationName" placeholder="充電站名稱">
<input type="text" class="stationCharge" placeholder="免費、付費">
<input type="button" class="btn" value="儲存">
<h2>資料顯示</h2>
<!-- 免費與投幣式事件監聽設計 -->
<div class="filter">
<input type="button" value="全部">
<input type="button" value="免費">
<input type="button" value="投幣式">
</div>
<ul class="list">
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js - 1. 使用 input
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
// DOM 拉出全域變數進行管理
const list = document.querySelector(".list");
// 網頁初始化狀態
// 預設載入函式
function init() {
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
}
init();
// 免費與投幣式事件監聽設計
// 篩選器邏輯
const stationFilter = document.querySelector(".filter");
// console.log(stationFilter);
stationFilter.addEventListener("click", function(e) {
// console.log(e);
// 取值
// console.log(e.target.value);
// 判斷是否有點擊到按鈕
// console.log(e.target.value == undefined);
if(e.target.value == undefined) {
console.log("你點擊到空的地方");
// 回傳、強制中斷
return;
}
// console.log(e.target.value);
let str = "";
data.forEach(function(item, index) {
// console.log(item.Charge);
// console.log(e.target.value == item.Charge);
if(e.target.value == "全部") {
str += `<li>${item.name},${item.Charge}</li>`
} else if(e.target.value == item.Charge) {
str += `<li>${item.name},${item.Charge}</li>`
}
})
// console.log(str);
list.innerHTML = str;
})
// 新增充電站 UI 介面邏輯新增
// 新增邏輯
const stationName = document.querySelector(".stationName");
const stationCharge = document.querySelector(".stationCharge");
const btn = document.querySelector(".btn");
// console.log(stationName, stationCharge, btn);
btn.addEventListener("click", function(e) {
// console.log(e);
console.log(stationName.value);
console.log(stationCharge.value);
// 查看資料的物件格式
// {
// Charge: "免費",
// name: "廖洧杰充電站"
// }
let obj = {};
obj.name = stationName.value;
obj.Charge = stationCharge.value;
console.log(obj);
data.push(obj);
init();
// 資料儲存後清空表單的值
stationName.value = "";
stationCharge.value = "";
})
// index.html - 2
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Review JS</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>複習 Review JS</h1>
<h2>新增資料</h2>
<input type="text" class="stationName" placeholder="充電站名稱">
<select class="stationCharge">
<option value="免費">免費</option>
<option value="投幣式">投幣式</option>
</select>
<input type="button" class="btn" value="儲存">
<h2>資料顯示</h2>
<!-- 免費與投幣式事件監聽設計 -->
<div class="filter">
<input type="button" value="全部">
<input type="button" value="免費">
<input type="button" value="投幣式">
</div>
<ul class="list">
</ul>
<script src="all.js"></script>
</body>
</html>
// all.js - 2. 使用 select > option
let data = [
{
Charge: "免費",
name: "廖洧杰充電站"
},
{
Charge: "投幣式",
name: "小花充電站"
},
{
Charge: "投幣式",
name: "小明充電站"
},
{
Charge: "投幣式",
name: "小天充電站"
}
];
// DOM 拉出全域變數進行管理
const list = document.querySelector(".list");
// 網頁初始化狀態
// 預設載入函式
function init() {
let str = "";
data.forEach(function(item, index) {
// console.log(item);
// console.log(`<li>${item.name},${item.Charge}</li>`);
// <li>xx充電站,免費</li>
let content = `<li>${item.name},${item.Charge}</li>`;
str += content;
})
// console.log(str);
list.innerHTML = str;
}
init();
// 免費與投幣式事件監聽設計
// 篩選器邏輯
const stationFilter = document.querySelector(".filter");
// console.log(stationFilter);
stationFilter.addEventListener("click", function(e) {
// console.log(e);
// 取值
// console.log(e.target.value);
// 判斷是否有點擊到按鈕
// console.log(e.target.value == undefined);
if(e.target.value == undefined) {
console.log("你點擊到空的地方");
// 回傳、強制中斷
return;
}
// console.log(e.target.value);
let str = "";
data.forEach(function(item, index) {
// console.log(item.Charge);
// console.log(e.target.value == item.Charge);
if(e.target.value == "全部") {
str += `<li>${item.name},${item.Charge}</li>`
} else if(e.target.value == item.Charge) {
str += `<li>${item.name},${item.Charge}</li>`
}
})
// console.log(str);
list.innerHTML = str;
})
// 新增充電站 UI 介面邏輯新增
// 新增邏輯
const stationName = document.querySelector(".stationName");
const stationCharge = document.querySelector(".stationCharge");
const btn = document.querySelector(".btn");
// console.log(stationName, stationCharge, btn);
btn.addEventListener("click", function(e) {
// console.log(e);
console.log(stationName.value);
console.log(stationCharge.value);
// 查看資料的物件格式
// {
// Charge: "免費",
// name: "廖洧杰充電站"
// }
let obj = {};
obj.name = stationName.value;
obj.Charge = stationCharge.value;
console.log(obj);
data.push(obj);
init();
// 資料儲存後清空表單的值
// 資料儲存後賦予表單值
stationName.value = "";
stationCharge.value = "免費";
})