JS 物件與陣列
介紹陣列與物件及基礎forEach介紹
物件
物件相對於陣列,像是更進一步將各個值依各屬性不同各自整理起來,值可以是字串、陣列…等等。
以下示範:
1 2 3 4 5 6 7
| var house = {
"room": 3, "park": false, "name": "Tom", "son" : ["Bob","Kevin","Cindy"] }
|
物件起手式,同樣可以宣告一個空的物件,再依需求”賦予”,EX.
1 2
| var house = {}; house.person = "Tom";
|
陣列
陣列介紹
1 2 3 4
| arr = [ 'cat', 'dog', 'tiger' ] console.log(arr)
|
- 以上範例,取得 cat 時,animals[0],:point_right:表示陣列從0開始
- 陣列裡的內容皆是相同的(字串與字串、數字與數字)
- 圖解:

陣列中的基礎操作
- push (放入):
將值推入陣列最後一個
圖示範例:

通常我們陣列起手式,可以先宣告一個空的陣列,再依需求放入,EX.
1 2
| var colors = []; colors.push("blue")
|
取得最後一個元素
- 索引與lenth不同,前者起算為0,後者起算為1,所以欲取得最後一個數字,
使用arr[arr.lenth-1]取得。

陣列處理方法forEach()
陣列處理方法其實有很多:
- forEach()
- filter()
- find()
- map()
- every()
- some()
- reduce()
這裡先介紹相對單純的forEach ,不會額外回傳值,只單純執行每個陣列內的物件或值。
以下經由code舉例來觀察forEach的形式:
1 2 3 4 5 6 7
| var A = [1];
A.forEach(function(item,index,array){ console.log(item,index,array); });
|

1 2 3 4 5 6 7
| var A = [1,2];
A.forEach(function(item,index,array){ console.log(item,index,array); });
|

由上圖示例可知,function內容跑完 第一個值印出後再run第二個,
將陣列參數改成其他亦然:
1 2 3 4 5 6
| var colors = ["blue", "red"]
colors.forEach(function(item,index){ console.log(item); console.log(index); })
|
平時陣列如要計算累加,最直覺方式為:
1 2 3
| var num = [1,2,3,4,5];
console.log(num[0]+num[1]+num[2]+num[3]+num[4])
|
但假若陣列是大量資料,有幾百幾千筆,這時使用forEach就可以設置累加:
1 2 3 4 5 6 7 8 9 10
| var num = [1,2,3,4,5];
var total = 0;
num.forEach(function(item){ total+=item; })
console.log(total);
|
以forEach進行篩選並形成新的陣列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var num = [1,2,3,4,5];
var total = 0;
var newNum = [];
num.forEach(function(item){ if (item%2 ===0){ total+=1;
newNum.push(item); } }) console.log(newNum); console.log(total);
|

以forEach陣列讀取物件資料
forEach陣列不只可以讀取數字,也可以讀取布林值、字串,當然連物件也可以讀取:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var data = [ { name: "Shawn", age: 28, }, { name: "Amy", age: 27, } ];
data.forEach(function(item){ console.log(item); });
|
印出結果為兩個物件:

那麼如何取物件內個別資料,以下方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var data = [ { name: "Shawn", age: 28, }, { name: "Amy", age: 27, } ];
data.forEach(function(item){ console.log(item.age); });
|

綜合以上介紹,確定forEach
可用來做大筆資料累加及參數可以是物件,那麼結合起來,forEach
可用來篩選json資料
的各資料的總數。
比如實例上,篩選json資料男女總數,可以此去撰寫:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| let total = {
female: 0, male: 0, } data.forEach(function(item){ if (item.sex == "女性"){ total.female+=1; }else if (item.sex == "男性") total.male+=1; });
console.log (`女性總共有$(total.female)人`); console.log (`男性總共有$(total.male)人`);
|
假如需要再結合創新的陣列:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| let total = {
female: [], male: [], } data.forEach(function(item){ if (item.sex == "女性"){ total.female.push(item); }else if (item.sex == "男性") total.male.push(item); });
console.log (`女性總共有$(total.female.length)人`); console.log (`男性總共有$(total.male.length)人`);
|