配列
I. 配列(Array)の基本
たくさんのデータをバラバラに管理するのは大変です。そこで使うのが「配列(はいれつ)」という、複数のデータをひとつにまとめて管理できるリストのような道具です。
配列(はいれつ)は「ならんだ箱」
たくさんのデータを、ひとつのグループとしてまとめたいときに、「配列」を使います。留学生のみなさんには、「番号がついたロッカー」 や 「番号がついた部屋が並んでいるマンション」 をイメージすると分かりやすくなります!
Tip
漢字のヒント 「配」 は「くばる」、「列」 は「ならぶ」という意味です。 みんなが並んでいる様子をイメージすると、覚えやすいですよ!
[ ] (角(かく)かっこ)
JavaScriptで配列(はいれつ)を使うとき、必ず出てくるのが [ ](角(かく)かっこ) です。
大きく分けて、2つの使い方があります。
配列を「作る」ときの [ ]
→「新しいマンションを建てる」イメージ
一番はじめに、中身(なかみ)をまとめて入れるときに使います。
const colors = ["赤", "青", "黄(き)"];
[:ここからマンションが始まります。,:部屋(へや)と部屋の間の「かべ」です。]:ここでマンションが終わります。
中身を「指定する」ときの [ ]
→「部屋番号(へやばんごう)で 呼ぶ」イメージ
作ったあとで、「○番目のデータがほしい!」というときに使います。
console.log(colors[0]); // 「赤」が出てくる
ここが大事!「0番」から始まるルール
マンションの「1号室(いちごうしつ)」は、プログラミングでは [0] と書きます。
- 1つめ:
colors[0] - 2つめ:
colors[1] - 3つめ:
colors[2]
Tip
覚え方: プログラミングの世界では、「まだ一歩(いっぽ)も動いていない状態」を 0 と考えます。だから最初が 0 なんです。 「1つめは 0(ゼロ)!」 と心の中で3回唱えてください。これだけで、バグが半分に減りますよ!
中身を「書きかえる」ときの [ ]
→「ロッカーの中身を 入れ替える」イメージ
特定のロッカー番号を指定して、中身を新しくすることもできます。
const snacks = ["チョコ", "グミ"];
snacks[1] = "アイス"; // 1番ロッカー(2つめ)のグミを、アイスに変える
console.log(snacks); // ["チョコ", "アイス"]
まとめ:[ ] の役割(やくわり)
| 使い方 | やっていること | 例え話 |
|---|---|---|
[a, b, c] | 配列を作る | マンションを建てる |
[0] | データを取り出す | 部屋をノックする |
[0] = "x" | データを入れ替える | 住人を入れ替える |
Note
よくあるミス: 全角の
[ ]を使ってしまうとエラーになります。必ず半角の[ ]を使いましょう!
配列の要素
配列のひとつひとつの箱の中に入っているデータを配列の「要素(ようそ)」と言います。
配列の要素の数はlengthプロパティで、知ることができます。オブジェクトのプロパティを取り出すときは、「.(ドット)」 を使います。
fruits.length→ 今、箱がいくつあるか(3つ)教えてくれます。
console.log(fruits.length); // 3 と表示(ひょうじ)されます。
留学生へのアドバイス
いかがでしょうか?「0から始まるリスト」のイメージはつかめましたか?
II. よく使うプロパティ・メソッド・演算子
配列には、中身を操作するための「道具(メソッド)」や「情報(プロパティ)」、そして「特別な記号(演算子)」がたくさんあります。
留学生の方に特に覚えてほしい、「これだけは外せない!」という便利なリストをまとめました。
よく使うプロパティ(配列の情報)
プロパティは、配列が持っている「データ」のことです。
length(レングス)
配列の中に、今いくつデータが入っているかを教えてくれます。
const students = ["マリア", "ジョン", "リー"];
console.log(students.length); // 3 が出る
- イメージ: 列に並んでいる人の数をパッと数えるリーダーのような存在です。
So What?(なぜ大切なの?)
配列の .length プロパティを使うことで、「データが今いくつあるか」を常に知ることができます。これにより、データの数が増えたり減ったりしても、プログラムを書き直さずに柔軟に対応できるようになります。
覚えたい便利なメソッド(道具)
配列操作のメソッド
配列には、中身を操作(そうさ)するための便利なメソッドがたくさんあります。
代表的(だいひょうてき)なメソッドを、**「元の配列が変わるかどうか」**と 「どこを操作するか」 に注目して、まとめて解説します。
配列を 「電車(でんしゃ)の車両(しゃりょう)」 や 「人の列(れつ)」 に例えて説明するのが一番わかりやすいです。
push(プッシュ):おしりに追加する
一番最後(右側)に、新しいデータを追加します。
- イメージ: 電車の最後に、新しい車両をつなげる。
- 元の配列: 変わります。
const train = ["車両(しゃりょう)A", "車両(しゃりょう)B"];
train.push("車両(しゃりょう)C");
console.log(train); // ["車両(しゃりょう)A", "車両(しゃりょう)B", "車両(しゃりょう)C"]
pop(ポップ):おしりをひとつ消す
一番最後(右側)のデータを1つ取り除きます。
- イメージ: 電車の最後の車両を切り離(はな)す。
- 元の配列: 変わります。
const train = ["車両(しゃりょう)A", "車両(しゃりょう)B", "車両(しゃりょう)C"];
const last = train.pop();
console.log(last); // "車両(しゃりょう)C" (消えたもの)
console.log(train); // ["車両(しゃりょう)A", "車両(しゃりょう)B"]
shift(シフト):先頭をひとつ消す
一番最初(左側・0番目)のデータを消して、残りのデータを前にずらします。
- イメージ: お店の行列で、先頭の人が店に入り、後ろの人が全員前にずれる。
- 元の配列: 変わります。
const queue = ["1番の人", "2番の人", "3番の人"];
queue.shift();
console.log(queue); // ["2番の人", "3番の人"] (みんな前にずれた!)
slice(スライス):一部をコピーする
指定(してい)した場所だけを、別の新しい配列として取り出します。
- イメージ: 写真を撮(と)るようなものです。景色(元の配列)はそのままで、必要な部分だけを切り取ります。
- 元の配列: 変わりません(ここが重要!)。
const members = ["A", "B", "C", "D"];
// 1番目から3番目の「手前」までコピー
const sub = members.slice(1, 3);
console.log(sub); // ["B", "C"]
console.log(members); // ["A", "B", "C", "D"] (元の配列(はいれつ)はそのまま!)
unshift(アンシフト):先頭にひとつ追加する**
配列の**一番最初(先頭)**に、新しいデータを追加します。
- イメージ: 行列の一番前に割り込み(わりこみ)をする感じです。
- 元の配列: 変わります。
let queue = ["2番の人", "3番の人"];
// unshift を使って、一番前に「1番の人」を入れます
queue.unshift("1番の人");
// 中身を確認(かくにん)してみましょう
console.log(queue); // 結果:["1番の人", "2番の人", "3番の人"]
splice(スプライス):好きな場所にデータを出し入れする
配列の好きな場所のデータを消したり、新しく入れたりします。
- イメージ: 「手術(しゅじゅつ)」です。悪い部分を切り取ったり、新しい部品を埋(う)め込んだりします。
- 元の配列: 変わります。
コードの書きかた(ルール)
splice のうしろのカッコ ( ) には、2つの数字を書きます。
<ruby>配列<rt>はいれつ</rt></ruby>名.splice(スタートする番号, 消したい数);
- 1つめの数字: 何番目(インデックス)から消し始めるか?
- 2つめの数字: そこから何個(いくつ)消すか?
入れ替る例
const colors = ["赤", "青", "緑"];
// 1番目(青)を消して、代わりに「黄(き)」を入れる
colors.splice(1, 1, "黄(き)");
console.log(colors); // ["赤", "黄(き)", "緑"]
削除する例
const fruits = ["りんご", "バナナ", "オレンジ", "メロン"];
// 「バナナ」を消してみましょう
// バナナは [1] 番目(2つめ)です。
fruits.splice(1, 1);
// 中身を確認(かくにん)します
console.log(fruits);
// 結果:["りんご", "オレンジ", "メロン"] (バナナがいなくなりました!)
includes(インクルーズ):デーがあるかないかを調べる
そのデータが配列の中にあるかないかを調べます。
- イメージ: 探し物を見つける「警察犬」です。
- 答え:
true(ある)かfalse(ない)で返ってきます。
// カバンの中に「りんご」「ペン」「ノート」が入っています
const myBag = ["りんご", "ペン", "ノート"];
// 「ペン」が入っているかチェックします
const hasPen = myBag.includes("ペン");
console.log(hasPen); // 結果:true(あります!)
// 「バナナ」が入っているかチェックします
const hasBanana = myBag.includes("バナナ");
console.log(hasBanana); // 結果:false(ありません...)
delete 演算子(デリート)
特定の場所のデータを消しますが、注意が必要です。
- 注意: データは消えますが、「箱(部屋)」は残ったままになります。部屋が「空(empty)」の状態になり、配列の長さ(length)も変わりません。
const snacks = ["チョコ", "グミ", "アメ"];
delete snacks[1];
console.log(snacks); // ["チョコ", <empty>, "アメ"]
console.log(snacks.length); // 3 のまま!(穴があいた状態)
Important
留学生へのアドバイス: 配列からきれいにデータを消したいときは、
deleteではなくspliceを使うように教えてあげてください。deleteは「穴」があくので、あまり使いません。
スプレッド演算子 ... (てん・てん・てん)
配列の中身を バラバラにして取り出す 魔法の記号です。
- イメージ: 袋に入ったお菓子を、テーブルの上に全部ザーッと広げる感じです。
const groupA = ["A", "B"];
const groupB = ["C", "D"];
// 2つの配列(はいれつ)を合体させて、新しい配列(はいれつ)を作る
const all = [...groupA, ...groupB];
console.log(all); // ["A", "B", "C", "D"]
比較(ひかく)テーブル
| 種類 | 名前 | 場所 | 動き | 元の配列は? |
|---|---|---|---|---|
| プロパティ | length | すべて | 数を数える | 変わらない |
| メソッド | push | 最後 | 追加する | 変わる |
| メソッド | pop | 最後 | 消す | 変わる |
| メソッド | shift | 最初 | 消す(ずれる) | 変わる |
| メソッド | slice | どこでも | コピーする | 変わらない |
| メソッド | unshift | 最初 | 足す | 変わる |
| メソッド | splice | どこでも | 入れ替える | 変わる |
| メソッド | includes | すべて | あるか探す | 変わらない |
| 演算子 | delete | すべて | 穴をあけて消す | 変わる(非推奨) |
| 演算子 | ... | すべて | 中身を広げる | 変わらない |
留学生へのアドバイス
「元の配列が変わってしまうメソッド(push, pop, shift)」を使うときは注意が必要です。もし、元のデータを壊(こわ)したくないときは、slice を使ってコピーを作ってから作業する のがプロのコツですよ!
Tip
「slice(スライス)」 は、料理でハムやチーズを薄(うす)く切るのと同じ言葉です。「元の塊(かたまり)から、一切れ分をもらう」と覚えると忘れません。
Tip
「splice」と「slice」は名前が似ている!
splice:手術(しゅじゅつ)して中身をいじる。slice:写真(しゃしん)のように一部を撮るだけ。この違いを強調(きょうちょう)してあげると、留学生も混乱(こんらん)しません。
III. 連想配列
「連想配列(れんそうはいれつ)」という言葉は、少し難しく聞こえますよね。 簡単に言うと、「番号(ばんごう)の代わりに、『名前(ラベル)』をつけた箱(はこ)」 のことです。
JavaScriptでは「オブジェクト」の一種です。メソッドがなく、データだけをまとめたものです。
1. 普通(ふつう)の配列との違い
普通の配列と、連想配列の違いを「ロッカー」でイメージしてみましょう。
-
普通の配列 (Array): 番号がついたロッカー。
-
「0番のロッカー、1番のロッカー……」と、数字 で中身を探します。
-
連想配列 (Associative Array): 名前が書かれたラベル付きのロッカー。
-
「『名前』のロッカー、『国籍(こくせき)』のロッカー……」と、言葉 で中身を探します。
2. 書き方と呼び方
「名前(Key:キー)」と「中身(Value:値(あたい))」をセットにして作ります。
// 連想配列(はいれつ)(オブジェクト)を作る
const user = {
name: "田中",
age: 20,
country: "日本"
};
中身を取り出すには、ドット.やブラケット[]を使います。
// 中身を取り出す
console.log(user["name"]); // 「田中」が出る
console.log(user.name); // これでも「田中」が出る(こっちがよく使われます)
3. なぜ「連想(れんそう)」というの?
「連想」とは、「Aという言葉から、Bを思い出す」 という意味です。
国と「食べ物・場所」の例
それぞれの国をイメージしたときに、パッと思い浮かぶものはありませんか?
- 日本 から連想するのは… 「お寿司(すし)」
- イタリア から連想するのは… 「ピザ」
- フランス から連想するのは… 「エッフェル塔(とう)」
このように、例えば「国名(名前) を聞いたら、その国の 特徴(データ) を思い出す」というような心の動きを、「連想」と言います。
「名前(キー)」と「中身(バリュー)」がセットになっている 仕組みが、「連想」の仕組みとよく似ているため、「連想配列」と呼ばれるのです。
4. 配列と連想配列のまとめ
| 種類 | 探し方(呼び方) | どんなときに使う? |
|---|---|---|
| 普通の配列 | 0, 1, 2…(数字) | 出席番号や買い物リストなど、順番が大事なとき |
| 連想配列 | “name”, “price”…(言葉) | プロフィールや商品の詳細など、意味が大事なとき |
Tip
留学生へのアドバイス: 実は「連想配列」という言葉は、もともと他のプログラミング言語(PHPやRubyなど)で使われていた言葉なんです。JavaScriptでは、この「連想配列」のことを 「オブジェクト」 と呼びます。「名前(キー)と中身(バリュー)がセットになっている」状態は、「プロパティ名とプロパティの値がセットになっている」状態と同じだからです。書き方も同じですね。ただ「連想配列」はデータだけでメソッドはありません。
いかがでしょうか?「数字ではなく、名前で探すリスト」だと考えれば簡単ですね!
V. 二次元配列
「二次元配列(にじげんはいれつ)」という言葉を聞くと、なんだか難しそうに感じますよね。 でも大丈夫です。一言でいうと、「配列(リスト)の中に、さらに配列が入っているもの」 のことです。
イメージは「マンションの 部屋番号」
普通の配列が「一列にならんだロッカー」だとしたら、二次元配列は 「たて と よこ に ならんだマンション」 です。
- 1つめの数字: 何階(なんがい)か?
- 2つめの数字: どの部屋か?
あるいは 「エクセルの表」 をイメージした方がわかりやすいかもしれません。
- 1つめの数字: 行:ぎょう / Row
- 2つめの数字: 列:れつ / Column
| 1列 | 2列 | 3列 | |
|---|---|---|---|
| 1行 | |||
| 2行 | |||
| 3行 |
JavaScriptでの書きかた
学校のクラスの「座席表(ざせきひょう)」を例に見てみましょう。
const classMap = [
["田中", "鈴木"], // 0番目のグループ(1列目)
["佐藤", "マリア"], // 1番目のグループ(2列目)
["ジョン", "リー"] // 2番目のグループ(3列目)
];
| 1列 | 2列 | |
|---|---|---|
| 1行 | 田中 | 鈴木 |
| 2行 | 佐藤 | マリア |
| 3行 | ジョン | リー |
中身を取り出すとき
カギかっこを 2つ [ ][ ] 並べて書きます。
console.log(classMap[2][1]); // 「リー」さんが出ます!
classMap[2]→ 3つめのグループ([“ジョン”, “リー”])を選びます。[1]→ その中の、2番目の人(リー)を選びます。
| 1列 | 2列 | |
|---|---|---|
| 1行 | [0][0] | [0][1] |
| 2行 | [1][0] | [1][1] |
| 3行 | [2][0] | [2][1] |
なぜ「二次元」というの?
- 一次元(いちじげん): 「線」です。横(よこ)だけにデータがならんでいます。
- 二次元(にじげん): 「面」です。横(よこ)と縦(たて)にデータが広がっています。
Tip
「多次元(たじげん)」って何? 二次元(たて・よこ)よりもさらに増えて、三次元(奥行き・高さ)など、もっと複雑になったものをまとめて「多次元」と呼びます。
どんなときに使う?
- ゲームの地図: どこに宝箱(たからばこ)があるか、座標(ざひょう)で決めるとき。
- カレンダー: 「○週目の、○曜日」というデータ。
- 写真のデータ: デジタルの写真は、色のついた点が縦と横に並んでできています。
留学生へのアドバイス
二次元配列を使うとき、一番多いミスはこれです。 「どっちの数字が『たて』で、どっちが『よこ』だっけ?」
混乱(こんらん)したときは、こう教えてあげてください。
「左側のカッコが『階(かい)』で、右側のカッコが『部屋』だよ!」
いかがでしょうか?「リストのリスト」という考え方に慣れると、プログラミングでできることが一気に広がります。
VI. オブジェクトの配列
現実のプログラムでは、以下のように「オブジェクト(情報のセット)」を配列にまとめることが多いです。これは「顧客名簿」や「商品カタログ」のようなイメージです。
const customers = [
{ name: "山田", age: 30 },
{ name: "佐藤", age: 25 }
];
「[]角(かく)かっこ」と「{}波(なみ)かっこ」を使ったこの書き方を、覚えておいてください。