では 本番向けテンプレート:条件判定関数化+部署単位集計+非同期処理+continue を作ります。
これを使えばすぐに実務で大量データを処理できます。
本番向けテンプレート
条件:
- 名前が空 → スキップ
- 非アクティブ → スキップ
- スコア(score)が 70 未満 → スキップ
- 部署単位で条件を満たすユーザーがいなければスキップ
- 条件を満たすユーザーだけ非同期で並列処理
- 条件判定を関数化してルール変更を簡単に
コード例
// 擬似API: 部署ごとのユーザー取得
async function fetchDepartmentUsers(deptName) {
const data = {
"営業部": [
{name:"Alice", active:true, score:85},
{name:"Bob", active:false, score:90},
{name:"Charlie", active:true, score:60},
],
"開発部": [
{name:"David", active:true, score:95},
{name:"Eve", active:true, score:65},
{name:"", active:true, score:80}
],
"人事部": [
{name:"", active:false, score:50},
{name:"Frank", active:false, score:80}
]
};
return data[deptName] || [];
}
// 条件判定関数
function isValidUser(user, minScore = 70) {
if (!user.name) return false;
if (!user.active) return false;
if (user.score < minScore) return false;
return true;
}
// 非同期処理関数(例: DB保存やAPI呼び出し)
function processUser(user) {
return new Promise(resolve => {
setTimeout(() => {
console.log(`処理完了: ${user.name}, score=${user.score}`);
resolve();
}, 200);
});
}
// 部署単位集計関数(例: 有効ユーザー数)
function summarizeDepartment(deptName, validUsers) {
console.log(`${deptName} に有効ユーザー ${validUsers.length} 人`);
}
// 本番向けメイン処理
async function main() {
const departments = ["営業部", "開発部", "人事部"];
const minScore = 70; // スコアの閾値は簡単に変更可能
for (const dept of departments) {
console.log(`--- ${dept} 処理開始 ---`);
const users = await fetchDepartmentUsers(dept);
const validUsers = [];
for (const user of users) {
if (!isValidUser(user, minScore)) continue; // 条件を満たさないユーザーはスキップ
validUsers.push(user);
}
if (validUsers.length === 0) {
console.log(`${dept} に条件を満たすユーザーなし → スキップ`);
continue; // 部署単位でスキップ
}
summarizeDepartment(dept, validUsers); // 部署単位集計
await Promise.all(validUsers.map(user => processUser(user))); // 並列処理
console.log(`--- ${dept} 処理完了 ---`);
}
console.log("全部署処理完了");
}
main();
JavaScript想定出力
--- 営業部 処理開始 ---
営業部 に有効ユーザー 1 人
処理完了: Alice, score=85
--- 営業部 処理完了 ---
--- 開発部 処理開始 ---
開発部 に有効ユーザー 1 人
処理完了: David, score=95
--- 開発部 処理完了 ---
--- 人事部 処理開始 ---
人事部 に条件を満たすユーザーなし → スキップ
全部署処理完了
ポイント(本番向け)
- 条件判定を関数化
- ルール変更が簡単(例:
minScore = 80にするだけ) - ネストが浅く読みやすい
- ルール変更が簡単(例:
- 部署単位の集計関数
- 有効ユーザー数や平均スコアなどをまとめて出力可能
- 監査やレポート作成に便利
- 非同期並列処理
Promise.allで条件を満たすユーザーだけ高速処理- API呼び出しやDB書き込みの実務でそのまま応用可能
continueの使いどころ- 条件に合わないユーザーをスキップ
- 部署単位で条件を満たすユーザーなし → 外側ループもスキップ
💡 応用アイデア
- 条件判定関数にログ出力を追加してスキップ理由を記録
- 部署ごとの処理結果を JSON にまとめてレポート出力
- 並列処理と集計を組み合わせて大規模データ処理にも対応
