JavaScript・まとめる・くり返す

オブジェクト:名前つきでまとめる

配列が「番号つきの棚」なら、オブジェクトは「ラベルつきの引き出し」。名前・すきなもの・年齢のように、種類の違う値をひとまとめにして持てます。

配列は「番号つきの棚」でした。でも、しまちゃんの名前・住んでいる場所・すきなもののように、種類の違う情報をまとめたいときに番号で管理するのは大変です。そこで登場するのがオブジェクト。値それぞれに名前のラベルを貼ってしまえる引き出しです。

配列だと分かりにくい例

const shima = ["しまちゃん", "ゆきぐに", "おえかき"];
console.log(shima[1]);

shima[1]が何を指しているのか、番号だけでは思い出せません。オブジェクトなら、こう書けます。

const shima = {
  name: "しまちゃん",
  from: "ゆきぐに",
  like: "おえかき"
};
console.log(shima.from);

shima.from——読んだだけで「住んでいる場所」だと分かります。

書き方のきまり

const shima = {
  name: "しまちゃん",
  age: 3
};
部分意味
{ }引き出し全体のいれもの(配列の[ ]にあたるもの)
nameキー=ラベルの名前
:ラベルと中身の区切り
"しまちゃん"=中身
,次のラベルとの区切り

キーの名前は自分で自由に決められます。中身は文字でも数でも、配列でも構いません。

取り出す・書きかえる

取り出すときはドットでつなぎます。

console.log(shima.name);
console.log(shima.age);

書きかえも、取り出すのと同じ形に=をつけるだけです。

shima.age = 4;
console.log(shima.age);

新しいラベルをあとから足すこともできます。

shima.hobby = "さんぽ";

配列と同じで、constで作っても中身の変更は自由です(引き出しごと別のものに取りかえるのがダメ、というルールでした)。

配列とオブジェクトの使い分け

配列オブジェクト
["A", "B", "C"]{ name: "A", age: 3 }
呼び出し方番号([0]ラベル(.name
向いているもの同じ種類のものが並ぶ1つのものの違う情報
すきなもの一覧、点数の一覧プロフィール、設定、商品1件ぶん

迷ったら「順番に意味があるか」で考えます。順番が大事なら配列、名前で呼びたいならオブジェクトです。

組み合わせるともっと便利

オブジェクトの中に配列を入れることもできます。

const shima = {
  name: "しまちゃん",
  likes: ["おえかき", "ラーメン", "ゲーム"]
};

console.log(shima.likes[0]);
console.log(shima.likes.length);

shima.likesで棚を取り出し、そこから[0]で1つ取り出す——左から順に読むのがコツです。

1つのオブジェクトから、ラベルを指定して必要な値だけを取り出しています。
JavaScript配列:たくさんの値をまとめる番号でまとめる相棒、配列の回はこちら

このレッスンのまとめ

  1. オブジェクトは{ キー: 値, … }——ラベルつきの引き出し
  2. 取り出すのは名前.キー。書きかえも追加も同じ形でできる
  3. 同じ種類の並びは配列、1つのものの情報はオブジェクト

やってみよう

今回学んだ「オブジェクト」は、しまちゃんのページには使いません(プロフィールはHTMLに直接書きましたね)。たくさんのデータをプログラムで扱うとき——外部から取り寄せたデータを表示するようなページのための道具です。覚えておいて、必要になったら使いましょう。

よくある質問

配列とオブジェクトはどう使い分けますか?
同じ種類のものが並ぶなら配列(すきなもの3つ、点数の一覧)、1つのものについての違う情報をまとめるならオブジェクト(名前・年齢・住んでいる場所)です。
オブジェクトの値を取り出すにはどう書きますか?
オブジェクト名のうしろにドットとキー名を書きます(shima.name)。キー名が変数に入っているときは角かっこも使えます(shima["name"])。
存在しないキーを呼ぶとどうなりますか?
エラーにはならずundefinedが返ります。打ちまちがい(nameをnaemと書くなど)でも同じ結果になるので、値が出てこないときはまずつづりを確認しましょう。