今天要來個小挑戰,把這些東西組合起來,做一個簡單的作品:資料處理小工具。
目標:
這算是我第一次把學到的東西「串在一起用」,有點像小小的期中考。
先建立一個 data.json
,裡面放一些學生資料:
[
{ "name": "小明", "score": 80 },
{ "name": "小美", "score": 55 },
{ "name": "阿土", "score": 90 },
{ "name": "阿花", "score": 40 }
]
我先把計算平均分數的函式拆到 utils.js
裡:
export function average(arr) {
let sum = arr.reduce((acc, n) => acc + n, 0);
return arr.length > 0 ? sum / arr.length : 0;
}
這邊用到 Node.js
內建的 fs
模組來處理檔案。
import fs from "fs";
import { average } from "./utils.js";
// 1. 讀取 JSON 檔案
let rawData = fs.readFileSync("data.json", "utf-8");
let students = JSON.parse(rawData);
// 2. 篩選分數大於 60 的學生
let passed = students.filter(s => s.score >= 60);
// 3. 計算平均分數
let avgScore = average(students.map(s => s.score));
// 4. 輸出新的 JSON 檔案
fs.writeFileSync("passed.json", JSON.stringify(passed, null, 2));
console.log("及格學生名單已輸出到 passed.json");
console.log("全班平均分數:", avgScore);
執行結果會產生一個 passed.json
:
[
{ "name": "小明", "score": 80 },
{ "name": "阿土", "score": 90 }
]
我再加一個小功能:如果資料裡有重複的名字,用 lodash 幫我去掉。
先安裝:
npm install lodash
修改 index.js
:
import _ from "lodash";
let uniqueStudents = _.uniqBy(students, "name");
console.log("去除重複後:", uniqueStudents);
今天算是第一次把前幾天的東西「串起來」做一個完整的小工具。
雖然很簡單,但過程中真的感受到:
utils.js
,程式更乾淨。Node.js
的 fs
讀 JSON、寫 JSON,超有成就感。lodash
的 uniqBy
一行就解決「去重複」的問題,比自己寫迴圈方便很多。最大的心得是:
➡ 小作品雖然簡單,但能把學到的東西整合起來,才是真的有吸收。