Chapter05 配列と連想配列

概要と目標複数のデータの管理出来る
配列と連想配列を理解しよう。

複数の関連するデータは、配列や連想配列で管理すると便利。
JavaScriptでは、連想配列をオブジェクトとも呼ぶ。

今回のゴール

RERUN

配列とは 複数のデータを格納できるデータ型。

配列は、複数のデータを格納出来るデータ型。
配列には「通常の配列」と「連想配列」がある。

配列とは
  1. 1つの変数には1つのデータ。 1つの変数には1つのデータ。
  2. 複数のデータは、複数の変数が必要。 複数のデータには、複数の変数が必要。
  3. 1つの配列に複数のデータを格納できる。 1つの配列には、複数のデータを格納できる。
  4. 複数の共通するデータは配列が便利。 複数の共通するデータは配列が便利。

通常の配列 値に部屋番号が割り当てられる配列。

通常配列は、配列内の各値にインデックス番号という、番号が割り当てられる配列で、
配列の要素を利用したい時は、このインデックス番号を指定する必要がある。

配列の作成
var 配列名 = [値1, 値2, 値3];
(変数名)         0    1   2  ← インデックス番号(部屋番号)
配列の値にアクセス
配列名[インデックス番号]
       添字

配列を使ってみよう。

  1. 「chapter05」 ›「array」フォルダ内の「app.js」をテキストエディタで開く
  2. membersという配列を作成
chapter05/array/app.js
// 配列の作成
var members = ['指原', '山本', '柏木', '横山'];
  1. members配列のインデックス番号が「1」のデータを出力
chapter05/array/app.js
// 配列の作成
var members = ['指原', '山本', '柏木', '横山'];

// 配列の値にアクセス
console.log(members[1]); // 山本
  1. 上書き保存
  2. ブラウザで「chapter05」 ›「array」フォルダ内の「index.html」をブラウザで開く
ブラウザでの表示例

RERUN


反復を使って全ての値を
取り出してみよう。

配列は反復を活用することで、全ての値を効率よく取り出せる。

  1. 「chapter05」 ›「array」フォルダ内の「app.js」をテキストエディタで開く
  2. for文を使って配列の全要素を出力
chapter05/array/app.js
// 配列の作成
var members = ['指原', '山本', '柏木', '横山'];

// 配列の値にアクセス
console.log(members[1]); // 山本

// 反復を活用して全ての値を取り出す
for(var i = 0; i < 4; i++) {
  document.write('<p>' + members[i] + '</p>');
}
  1. 上書き保存
  2. ブラウザで「chapter05」 ›「array」フォルダ内の「index.html」をブラウザで開く
ブラウザでの表示例

RERUN


値の変更をしてみよう。

配列の各要素は、変数の様に扱える。
また、インデックス番号を指定しない場合は、配列の末尾に値が追加される

配列の作成(ブラケット構文)
配列名[インデックス番号] = ;
  1. 「chapter05」 ›「array」フォルダ内の「app.js」をテキストエディタで開く
  2. 「反復を活用して全ての値を取り出す」処理の前で、配列内のデータの変更や、配列にデータを追加を行う
chapter05/array/app.js
// 配列の作成
var members = ['指原', '山本', '柏木', '横山'];

// 配列の値にアクセス
console.log(members[1]); // 山本

// 配列の値を変更
members[1] = 'まゆゆ'; // members の 1号室に値を代入

// 反復を活用して全ての値を取り出す
for (var i = 0; i < 4; i++) {
  document.write('<p>' + members[i] + '</p>');
}
  1. 「反復を活用して全ての値を取り出す」処理のループの終了条件を members.lengthに変更
length ・・・ 配列の要素数を返すプロパティ
配列名.length
chapter05/array/app.js
// 配列の作成
var members = ['指原', '山本', '柏木', '横山'];

// 配列の値にアクセス
console.log(members[1]); // 山本

// 配列の値を変更
members[1] = 'まゆゆ'; // members の 1号室に値を代入

// 反復を活用して全ての値を取り出す
for (var i = 0; i < members.length; i++) {
  document.write('<p>' + members[i] + '</p>');
}
  1. 上書き保存
  2. ブラウザで「chapter05」 ›「array」フォルダ内の「index.html」をブラウザで開く
ブラウザでの表示例

RERUN

連想配列(オブジェクト) 添字が文字列の配列。

配列の添字は通常インデックス番号だが、任意の文字列を指定することもできる。
添字が文字列の配列のことを 連想配列と呼ぶ。
なお、JavaScriptではこの連想配列をオブジェクトとも呼ぶ。

連想配列(オブジェクト)の作成
var 配列名 = {
  キー1: 値1,
  キー2: 値2,
  キー3: 値3
};
連想配列(オブジェクト)にアクセス
配列名[キー]
// または
配列名.キー

連想配列(オブジェクト)を使ってみよう。

  1. 「chapter05」 ›「object」フォルダ内の「app.js」をテキストエディタで開く
  2. 連想配列を作成
chapter05/object/app.js
// オブジェクトの作成
var character = {
  name: '山田',
  age: 30,
  job: 'ゆうしゃ'
};
  1. 連想配列の各要素を出力
chapter05/object/app.js
// オブジェクトの作成
var character = {
  name: '山田',
  age: 30,
  job: 'ゆうしゃ'
};

// オブジェクトの出力
document.write('<p>俺は' + character['job'] + 'の' + character['name'] + 'だ!</p>');
document.write('<p>年齢は' + character.age + '歳だ!</p>');
  1. 上書き保存
  2. ブラウザで「chapter05」 ›「object」フォルダ内の「index.html」をブラウザで開く
ブラウザでの表示例

RERUN


値の変更をしてみよう。

連想配列も配列と同様で、各要素の値を変更したり、追加することができる。

連想配列の作成(ブラケット構文)
配列名[キー] = ;
  1. 「chapter05」 ›「object」フォルダ内の「app.js」をテキストエディタで開く
  2. 入力ダイアログで受け取った名前に変更する
chapter05/object/app.js
// オブジェクトの作成
var character = {
  name: '山田',
  age: 30,
  job: 'ゆうしゃ'
};

// 値の変更
character['name'] = prompt('名前を設定して下さい。');

// オブジェクトの出力
document.write('<p>俺は' + character['job'] + 'の' + character['name'] + 'だ!</p>');
document.write('<p>年齢は' + character.age + '歳だ!</p>');
  1. 上書き保存
  2. ブラウザで「chapter05」 ›「object」フォルダ内の「index.html」をブラウザで開く
ブラウザでの表示例

RERUN

日時の取得 現在の日時を取得する
オブジェクトがある。

JavaScriptで現在の日時を取得するには、Date オブジェクトを使う。
Date オブジェクトを使うには、newというキーワードを使って、
インスタンス化(実体化)する必要がある。

Dateオブジェクト
var 変数名 = new Date();
Dateオブジェクトの主なメソッド
メソッド 説明
getFullYear() (4桁) を取得
getMonth() (0 - 11) を取得
getDate() (1 - 31) を取得
getDay() 曜日 (0 - 6) を取得
getHours() 時間 (0 - 23) を取得
getMinutes() (0 - 59) を取得
getSeconds() (0 - 59) を取得

Dateオブジェクトを使ってみよう。

  1. 「chapter05」 ›「date」フォルダ内の「app.js」をテキストエディタで開く
  2. 現在の日時を取得
chapter05/date/app.js
// 現在日時のオブジェクトをインスタンス化
var now = new Date();
console.log(now);
  1. 上書き保存
  2. ブラウザで「chapter05」 ›「date」フォルダ内の「index.html」をブラウザで開く
ブラウザでの表示例

RERUN


Dateオブジェクトの
メソッドを使ってみる

  1. 「chapter05」 ›「date」フォルダ内の「app.js」をテキストエディタで開く
  2. 現在の日付や時間を取り出す
chapter05/date/app.js
// 現在日時のオブジェクトをインスタンス化
var now = new Date();
console.log(now);

// Dateオブジェクトのメソッド
var year = now.getFullYear();
var month = now.getMonth() + 1;
var date = now.getDate();
var hour = now.getHours();
var minute = now.getMinutes();
var seconds = now.getSeconds();

document.write(year + '年' + month + '月' + date + '日 ' + hour + '時' + minute + '分' + seconds + '秒');
  1. 上書き保存
  2. ブラウザで「chapter05」 ›「object」フォルダ内の「index.html」をブラウザで開く
ブラウザでの表示例

RERUN

練習問題 今回の理解度をチェック。

「chapter05」 › 「training」フォルダ内の「index.html」を開き、
下記の問題を解いて下さい。

ブラウザでの完成例

RERUN

    • ファイル名: app.js
  1. 表示するメッセージ
    時間 メッセージ
    0時 0時です。日付が変わりましたね。
    1時 1時ですがまだ寝ないんですか?
    2時 もう2時ですよ。まだ寝ないんですか?
    3時 3時です。寝れないんですか?
    4時 4時です。どうやら寝れないみたいですね。
    5時 5時ですが、もう起きるんですか?
    6時 6時です。早起きですね。
    7時 7時です。おはようございます。
    8時 8時です。朝ご飯食べましたか?
    9時 9時です。今日は何しますか?
    10時 10時です。そろそろお出かけですか?
    11時 11時です。お腹空いてきましたね。
    12時 12時です。お昼ごはんですね
    13時 13時です。お昼から何しますか?
    14時 14時です。眠たい時間ですね。
    15時 15時です。おやつの時間ですね
    16時 16時です。夕方ですね。
    17時 17時です。夕日はきれいですか?
    18時 18時です。暗くなってきましたね。
    19時 19時です。そろそろお腹も空いてきましたね。
    20時 20時です。晩御飯は食べましたか?
    21時 21時です。お風呂は入りましたか?
    22時 22時です。眠たくたってきましたか?
    23時 23時なので、そろそろ寝ますか?
解答例
chapter05/training/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>練習問題5</title>
</head>
<body>
  <script src="app.js"></script>
</body>
</html>
chapter05/training/app.js
// 配列の作成
var message = [
  '0時です。日付が変わりましたね。',
  '1時ですがまだ寝ないんですか?',
  'もう2時ですよ。まだ寝ないんですか?',
  '3時です。寝れないんですか?',
  '4時です。どうやら寝れないみたいですね。',
  '5時ですが、もう起きるんですか?',
  '6時です。早起きですね。',
  '7時です。おはようございます',
  '8時です。朝ご飯食べましたか?',
  '9時です。今日は何しますか?',
  '10時です。そろそろお出かけですか?',
  '11時です。お腹空いてきましたね。',
  '12時です。お昼ごはんですね。',
  '13時です。お昼から何しますか?',
  '14時です。眠たい時間ですね。',
  '15時です。おやつの時間ですね。',
  '16時です。夕方ですね。',
  '17時です。夕日はきれいですか?',
  '18時です。暗くなってきましたね。',
  '19時です。そろそろお腹も空いてきましたね。',
  '20時です。晩御飯は食べましたか?',
  '21時です。お風呂は入りましたか?',
  '22時です。眠たくたってきましたか?',
  '23時なので、そろそろ寝ますか?'
];

// 日時の取得
var now = new Date();
var hour = now.getHours();

// 画面にメッセージを出力
document.write('<p>' + message[hour] + '</p>');

解答例は全問題のチェックボックスが on になるとご覧いただけます。

まとめ 複数の関連するデータは、
配列で管理する。

配列や連想配列を使えば、複数のデータの管理が行いやすいです。

  • 添字がインデックス番号の配列を、通常の配列と言う。
  • 添字がキーの配列を、連想配列 (オブジェクト)と言う。
  • 配列や連想配列の全要素を取り出すには、ループを使う。