JavaScript | 配列メソッドの使い分け(map / forEach / filter / reduce の違い)

JavaScript JavaScript
スポンサーリンク

では「最後だけ『と』にする自然な日本語リスト」の作り方を見てみましょう。


カートの例

const cart = [
  { name: 'Tシャツ', price: 1500, quantity: 2 },
  { name: 'ジーンズ', price: 5000, quantity: 1 },
  { name: '帽子', price: 2000, quantity: 1 }
];
JavaScript

方法1: 配列操作で最後だけ特別扱い

const names = cart
  .filter(item => item.quantity > 0)
  .map(item => item.name);

let list;
if (names.length === 1) {
  list = names[0];
} else {
  list = names.slice(0, -1).join(', ') + ' と ' + names[names.length - 1];
}

console.log(list); // "Tシャツ, ジーンズ と 帽子"
JavaScript

👉 ポイントは 最後の要素だけ別に取り出す こと。


🔹 方法2: reduce で一気に組み立てる

const names = cart
  .filter(item => item.quantity > 0)
  .map(item => item.name)
  .reduce((acc, name, index, arr) => {
    if (index === 0) return name; // 最初の要素
    if (index === arr.length - 1) return acc + ' と ' + name; // 最後の要素
    return acc + ', ' + name; // 途中の要素
  }, '');

console.log(names); // "Tシャツ, ジーンズ と 帽子"
JavaScript

👉 reduce を使うと「最初・途中・最後」で条件分岐して自然な文章を作れる。


まとめ

  • シンプルに書くなら方法1(slice + join)
  • 関数型っぽくまとめたいなら方法2(reduce)
  • 実務では「ユーザーに見せるリスト」を作るときに便利

💡 さらに発展させると、

  • 「3つ以上なら『…など』を付ける」
  • 「英語風に ‘A, B, and C’ にする」

といった多言語対応や表現の工夫もできます。

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