本文へスキップ
BecomeCoder

JavaScriptコース · 第6章 オブジェクト指向と非同期 ― 仕上げ · レッスン26

総合演習 ― 小さなプログラムを組み立てる

ブラウザで完結

導入

ここまでの総まとめです。配列オブジェクト関数クラスを組み合わせて、小さなプログラムを動かします。完成形を動かし、改変してみましょう。

説明

「商品リストから、税込み合計と高額商品を求める」プログラムです。

const TAX = 0.1;

const items = [
  { name: "ノート", price: 300 },
  { name: "ペン", price: 120 },
  { name: "リュック", price: 4800 },
  { name: "消しゴム", price: 80 },
];

function withTax(price) {
  return Math.floor(price * (1 + TAX));
}

function summarize(list) {
  const total = list.reduce((sum, item) => sum + item.price, 0);
  const expensive = list.filter((item) => item.price >= 1000);
  return {
    count: list.length,
    total,
    totalWithTax: withTax(total),
    expensive: expensive.map((i) => i.name),
  };
}

const result = summarize(items);
console.log(`商品数: ${result.count}`);
console.log(`税抜合計: ${result.total}円`);
console.log(`税込合計: ${result.totalWithTax}円`);
console.log(`高額商品: ${result.expensive.join(", ")}`);

クラス版に書き換えると、こうなります。

class Cart {
  constructor(items) {
    this.items = items;
  }
  get total() {
    return this.items.reduce((s, i) => s + i.price, 0);
  }
  add(item) {
    this.items.push(item);
  }
}

const cart = new Cart([
  { name: "本", price: 1500 },
  { name: "雑誌", price: 800 },
]);
cart.add({ name: "DVD", price: 2000 });
console.log(`合計: ${cart.total}円`);

やってみよう

  1. items に商品を追加して、合計が変わることを確認する
  2. 高額のしきい値を 1000 から 500 に変える
  3. Cartcount ゲッター(商品数)を足す

演習

items から price が 200 未満の商品名だけを filter + map で取り出し、表示してください。

ヒント1を見る

items.filter((i) => i.price < 200).map((i) => i.name)

まとめ

JavaScript コースの基礎編はここまでです。

身につけたこと
1console.log・変数・型
2文字列・テンプレートリテラル・メソッド
3配列・オブジェクト・Set/Map
4if / switch / for / while
5関数・アロー・コールバック・例外
6クラス・Promise / async-await

ブラウザの DevTools や Node.js、フロントエンド枠組み(React など)へ進む土台になります。HTML/CSS コースと組み合わせると、ページに動きをつける実践にもつながります。繰り返し手を動かして、書き方を体に覚えさせましょう。

実際に動かしてみよう

下のエディタにJavaScriptを書いて「実行」を押すと、ブラウザ内のJavaScriptで出力が表示されます。本文の例をそのまま試したり、書き換えたりしてみましょう(console.log の結果が下に出ます。input() を使う回は「標準入力」欄に値を入れてから実行します)。

JavaScript — ブラウザ内で実行

ブラウザ本体のJavaScriptで実行する学習用環境を読み込みます(外部エンジン不要・軽量です)。
スクロールして表示された時点でも自動で読み込まれます。