同學們的考試分數
const students = [
{ name: "小明", score: 85 },
{ name: "小華", score: 40 },
{ name: "小美", score: 92 },
{ name: "阿強", score: 55 },
];
forEach — 每個都看過一遍,做點事(不回傳新陣列)
students.forEach(function (s) {
console.log(s.name + "的分數是" + s.score);
});
//輸出 小明的分數是85
//輸出 小華的分數是40
//輸出 小美的分數是92
//輸出 阿強的分數是55
map — 每個都轉換成新的東西(回傳一樣長度的新陣列)
const names = students.map(function (s) {
return s.name;
});
console.log(names);
// 輸出 ["小明", "小華", "小美", "阿強"]
filter — 篩選條件 ,把符合的留下來(回傳新陣列,長度可能變短)
const passed = students.filter(function (s) {
return s.score >= 60; //分數大於等於60 ,就回傳值
});
console.log(passed);
// 輸出 [{name:"小明", score:85}, {name:"小美", score:92}]
find — 找出第一個符合條件的人(只回傳一個,不是陣列)
const topStudent = students.find(function (s) {
return s.score > 90;
});
console.log(topStudent);
// 輸出 {name:"小美", score:92}
some — 問「至少有一個人符合嗎?」(回傳 true/false)
const hasFailed = students.some(function (s) {
return s.score < 60;
});
console.log(hasFailed);
//輸出 true
every — 問「全部人都符合嗎?」(回傳 true/false)
const allPassed = students.every(function (s) {
return s.score >= 60;
});
console.log(allPassed);
//輸出 false
reduce — 把整群人壓縮成一個結果(例如總分)
const totalScore = students.reduce(function (sum, s) {
return sum + s.score;
}, 0);
console.log(totalScore);
//輸出 272
關於reduce的用法
reduce 可以想成「把一整排東西捲成一個結果」的工具,像把很多顆糖果丟進一個袋子最後秤總重一樣
整體來說,reduce 最常出現在一串「鏈式呼叫」(method chaining) 的最後一棒,前面通常是 filter(篩選)跟 map(轉換),負責「整理資料」,reduce 負責「收尾、算出最終的一個結果」