【初心者向け】JavaScript・TypeScriptの map と forEach の違いと使い分け完全ガイド+基本文法の違いも解説

スタディ


スポンサーリンク

✅JavaScriptとTypeScriptの違いから理解しよう

まず、そもそもJavaScriptとTypeScriptって何が違うの?というところから整理しましょう。

項目JavaScriptTypeScript
型指定なし(動的型付け)あり(静的型付け)
エラー検出実行時にわかるコーディング中・ビルド時にわかる
学習コスト低いやや高い(JSの知識が前提)
コンパイル不要(すぐ動く)JSに変換(トランスパイル)が必要
主なメリット書きやすい、柔軟性がある安全で大規模開発に強い

💡 TypeScriptは「型付きのJavaScript」

TypeScriptはJavaScriptをベースにした上位互換の言語で、numberstring などの型を明示的に書けるようになります。

✅ 例:数値を2倍にする関数

JavaScriptの場合

function double(num) {
  return num * 2;
}

console.log(double('10')); // → "1010"(文字列結合になってしまう!)

TypeScriptの場合

function double(num: number): number {
  return num * 2;
}

console.log(double('10')); // ❌ エラー(型が違う)

TypeScriptでは間違いを事前に防げるのが大きな強みです。

✅ map と forEach の基本的な違い

項目map()forEach()
用途配列を変換して新しい配列を作る各要素に処理を行う(副作用
戻り値変換後の新しい配列undefined(何も返さない)
使用シーンデータ変換(表示用リストなど)初期化、ログ出力、API呼び出しなど
関数の return必須(返さないと undefined 配列)任意(返しても無視される)

✅ mapの例と使い方

📌 例1:数値を2倍にする

const numbers = [1, 2, 3];
const doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6]

📌 例2:文字列を大文字にする

const names = ['taro', 'hanako'];
const upper = names.map(name => name.toUpperCase());
console.log(upper); // ['TARO', 'HANAKO']

📌 例3:オブジェクトから別の形に変換する

type User = {
  id: number;
  name: string;
};

const users: User[] = [
  { id: 1, name: 'Sato' },
  { id: 2, name: 'Tanaka' }
];

const nameList = users.map(user => `${user.id}: ${user.name}`);
console.log(nameList); // ['1: Sato', '2: Tanaka']

✅ forEachの例と使い方

📌 例1:各要素を初期化する(副作用)

users.forEach(user => {
  user.name = '初期名';
});

📌 例2:ログ出力に使う

const logs = [101, 102, 103];

logs.forEach(log => {
  console.log(`ログ番号: ${log}`);
});

📌 例3:HTMLの描画(例:ReactやVueでも応用可能)

const fruits = ['🍎', '🍌', '🍇'];

fruits.forEach(fruit => {
  document.body.innerHTML += `<p>${fruit}</p>`;
});

✅ よくあるミス:mapで return を忘れる

const nums = [1, 2, 3];

const result = nums.map(n => {
  n * 2;
});

console.log(result); // [undefined, undefined, undefined]

これは return をしていないためです。

👉 正しい書き方:

const result = nums.map(n => {
  return n * 2;
});

または

const result = nums.map(n => n * 2);

✅ まとめ:使い分けの早見表

シーンmapforEach
新しい配列を作る(値の変換)
各要素に処理をする(副作用のみ)
返り値を使いたい
ループの途中でbreakしたい(→できない)

✅ さらに理解を深めたい人へ

  • filter():条件に合う要素だけに絞り込み
  • reduce():配列を集計したいときに便利
  • some() / every():条件判定系
const hasEmpty = users.some(user => user.name === '');

🎯 結論

  • TypeScript を使えば mapforEach の使い方をより安全に実装可能!
  • map変換専用
  • forEach処理専用
  • 用途に応じて正しいツールを選ぶことが大事

コメント

タイトルとURLをコピーしました