では 複数条件+ネスト+非同期処理を駆使した本番想定サンプル を作ります。
実務シナリオ:部署ごとに複雑条件でユーザーを非同期処理
条件:
- 名前が空 → スキップ
- 非アクティブ → スキップ
- 評価(score)が 70 未満 → スキップ
- 部署内に条件を満たすユーザーが1人もいなければ部署単位でスキップ
- 条件を満たすユーザーだけ非同期で並列処理
コード例
// 擬似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] || [];
}
// 非同期処理関数(例: DB保存やAPI呼び出し)
function processUser(user) {
return new Promise(resolve => {
setTimeout(() => {
console.log(`処理完了: ${user.name}, score=${user.score}`);
resolve();
}, 200);
});
}
// メイン処理
async function main() {
const departments = ["営業部", "開発部", "人事部"];
for (const dept of departments) {
console.log(`--- ${dept} 処理開始 ---`);
const users = await fetchDepartmentUsers(dept);
// 部署に有効ユーザーがいるか判定する配列
const validUsers = [];
for (const user of users) {
// 複数条件でスキップ
if (!user.name) continue; // 名前なしスキップ
if (!user.active) continue; // 非アクティブスキップ
if (user.score < 70) continue; // スコア不足スキップ
validUsers.push(user);
}
// 部署単位で有効ユーザーなし → スキップ
if (validUsers.length === 0) {
console.log(`${dept} に条件を満たすユーザーなし → スキップ`);
continue;
}
// 条件を満たすユーザーだけ並列で非同期処理
await Promise.all(validUsers.map(user => processUser(user)));
console.log(`--- ${dept} 処理完了 ---`);
}
console.log("全部署処理完了");
}
main();
JavaScript想定出力
--- 営業部 処理開始 ---
処理完了: Alice, score=85
--- 営業部 処理完了 ---
--- 開発部 処理開始 ---
処理完了: David, score=95
--- 開発部 処理完了 ---
--- 人事部 処理開始 ---
人事部 に条件を満たすユーザーなし → スキップ
全部署処理完了
ポイント解説
- 複数条件のチェック
- 名前・アクティブ・スコアを
if+continueで順番にスキップ - ガード節を使うことでネストを浅く保つ
- 名前・アクティブ・スコアを
- 部署単位でのスキップ
- 内側ループで条件を満たすユーザーを
validUsersに集める - 長さが 0 の場合は部署全体をスキップ(フラグ代わり)
- 内側ループで条件を満たすユーザーを
- 並列非同期処理
Promise.allで条件を満たすユーザーのみ並列処理- 実務では API 呼び出し・DB 保存・メール送信などの高速化に有効
- 実務での応用例
- バッチ処理: 部署ごとのレポート作成
- データ検証: 条件外データを無駄に処理しない
- 非同期処理と条件スキップを組み合わせることで大規模データにも対応可能
💡 さらに発展させるアイデア
- 条件を関数化してユーザー判定ルールを簡単に変更可能にする
- スキップ理由をログに残す(監査対応)
- 部署単位の集計処理と組み合わせる
