KiSAKU
技術系約4分で読めます

配列を制すとJSが書ける — バニラJS入門(第5回)

公開

入門書を読み終えても何も作れない。これは文法を覚えていないからではありません。

データをどう扱うかを練習していないからです。実務のJavaScriptは、配列とオブジェクトをこねる作業が8割を占めます。

連載「一覧と詳細で覚えるフロントエンド」(全21回)

Part 2 JavaScriptの土台 / 第5回。前回:実装者が責任を持つ範囲のSEO 次回:データを画面に出す(近日公開)

そもそもJavaScriptとは

Webページに動きと処理を与えるプログラミング言語です。HTMLとCSSが静止画なら、JavaScriptは動画にあたります。

ボタンを押すと開くメニュー、入力チェック、地図のドラッグ。ページを読み込み直さずに何かが起きるなら、ほぼJavaScriptが動いています。

名前が似ているJavaとはまったく別の言語です(当時の流行に便乗した命名で、今も混乱のもとになっています)。

そしてJavaScriptは、ブラウザが唯一そのまま実行できる言語です。後で出てくるTypeScriptもReactも、最終的にはJavaScriptに変換されて動きます。土台はここだと考えてください。

この回で解ける困りごと

JavaScriptの入門書を読み終えても何も作れないのは、文法を覚えても「データをどう扱うか」を練習していないからです。実務のJSは、配列とオブジェクトをこねる作業が8割です。

よくある書き方(Before)

var names = [];
for (var i = 0; i < cars.length; i++) {
  if (cars[i].year < 1980) {
    names.push(cars[i].name);
  }
}

直した書き方(After)

const names = cars
  .filter(car => car.year < 1980)
  .map(car => car.name);

なぜそうなるか

変数は const から

var は使いません。再代入しないなら const、するなら let。const を既定にすると「この値は途中で変わらない」が読む人に伝わります。

扱うデータの形

const cars = [
  { id: 1, name: "スカイライン GT-R", year: 1969, price: 12000000 },
  { id: 2, name: "フェアレディZ",     year: 1969, price:  5800000 },
];

配列の中にオブジェクト。APIから返ってくるデータはほぼこの形です。

覚える配列メソッドは4つ

メソッド やること
map 全要素を別の形に変換する(件数は変わらない)
filter 条件に合う要素だけ残す
find 条件に合う最初の1件を取り出す
sort 並べ替える
const target = cars.find(car => car.id === 2);
const cheapOrder = [...cars].sort((a, b) => a.price - b.price);

sort は元の配列を破壊するので、[...cars] でコピーしてから並べ替えるのが安全です。

アロー関数

car => car.name は function (car) { return car.name; } の短縮形です。最初は読みにくいですが、配列メソッドと組むと一気に短くなります。

手を動かす課題

10件のデータを配列で用意し、次の4つを console.log で出してください。

  1. 名前だけの配列
  2. 1980年より前のものだけ
  3. idが3のもの1件
  4. 価格が安い順
自己チェックリスト

  • □ var を1つも使っていない
  • □ forループを配列メソッドに書き換えられた
  • □ find と filter の戻り値の違いを説明できる
  • □ DevToolsのConsoleでその場で試した

次回はこのデータを画面に出します。

今回の学び

まず、作れない理由は文法ではなくデータの扱いだということ。入門書は文法を一周させてくれますが、そこと実務のあいだに配列の練習が抜けていました。

次に、既定を変えない側に置くと、読む人に意図が伝わること。再代入しない宣言を既定にすると、「この値は途中で変わらない」が宣言の形で残ります。

そして、並べ替えは元の配列を壊すこと。他のメソッドと見た目が似ているぶん、ここだけ挙動が違うことを知らないと、離れた場所で不思議な不具合になります。

この記事を共有する

Xでポストはてブ
← ブログ一覧へ戻る