column

ITコラム

Solving puzzle together. Drawing light bulb on blackboard.

プログラミングノウハウ

2017.10.17

JavaScript【 array 】4 ~ 連想配列とfor..in文

配列では、変数名にインデックス番号が付いて各データを格納しますが、インデックス番号の代わりにデータと関連性のあるキーを用いて、データとキーを紐付けて各データを格納する方法もあり、これを連想配列といいます。
今回は、連想配列と、連想配列のデータをループさせる際に使用するfor..in文について紹介します。

なお、未経験からITエンジニアへの就職に興味がある方や未経験からプログラミングを効率よく学びたいと考えている方は、就職率98.3%で受講料無料のプログラミングスクールプログラマカレッジもおすすめです。

1. 連想配列とは

 
連想配列は、インデックス番号の代わりにデータと関連性のあるワードを用いて、変数名とワードを組み合わせて各データを格納する配列です。

インデックス番号の代わりとなるワードのことを「キー」と呼びます。
 
 
果物の値段を格納する配列変数を考えてみます。

りんご みかん ぶどう もも
350 380 580 490

 
このようなデータを、配列変数に格納すると、通常は次のようになります。

let fruitPrice = [350, 380, 580, 490];

そして、みかんの値段を使いたい時は、「 fruitPrice[1] 」と記述してデータを取得します。

インデックス番号の「 1 」とみかんとは関連性がないため、「 fruitPrice[1] 」を見ただけでは、何の値段なのかわかりません。
 
 
これを、キーと値段とを紐付けて次のようなデータとしてイメージしてみます。

キー りんご みかん ぶどう もも
データ 350 380 580 490

 
次のように記述すると、キーとデータを連想配列変数に格納することができます。

let fruitPrice =  {"りんご" : 350, "みかん" : 380, "ぶどう" : 580, "もも" : 490};

そして、みかんの値段を使いたい時は、次のように記述してデータを取得します。

alert("みかんの値段は" + fruitPrice["みかん"] + "円です。");

「 fruitPrice[“みかん”] 」を見ただけで、みかんの値段であることが予想できます。
 
 
このように、連想配列は、キーとデータが紐付いた配列で、次のように記述します。

    // 宣言と代入
    let 配列変数名 = {"キー1" : 値1,  "キー2" : 値2,  "キー3" : 値3};

    // データの取得
    let 変数名 = 配列変数名["キー2"];

▲目次へ戻る

 

2. for..in文

 
配列変数の中の全てのデータを表示するようなプログラムを作る場合、通常の配列を使うと、次のようにfor文が使えます。

    let fruitPrice = [350, 380, 580, 490];

    for (let i = 0;  i < fruitPrice.length;  i++) {
            document.getElementById("id_name").innerHTML += fruitPrice[i] + "円";
    }

しかし、連想配列の場合は、インデックス番号を使用しないため、for文のカウントを利用することができません。

このような場合に便利に使用できるのが、for..in文です。

for..in文は特別な使い方をする構文で、オブジェクトに含まれるプロパティを順に取得する際に使用します。

オブジェクトは、プロパティをまとめて管理するためのもので、プロパティは、値と名前とをセットにして管理します。
(連想配列はオブジェクト、中身のキーはプロパティの関係にあるといえます。)

先ほどのサンプルを、連想配列とfor..in文を使用して記述すると、次のようになります。

    let fruitPrice =  {"りんご" : 350,
                       "みかん" : 380,
                       "ぶどう" : 580,
                       "もも" : 490};

    for (let fName in fruitPrice) {
            document.getElementById("id_name").innerHTML
                += fName
                   + " : "
                   + fruitPrice[fName]
                   + "円";
    }

for..in文は、オブジェクトに含まれるプロパティの数だけ繰り返しを行うように組み込まれた構文です。
そのため、条件式や増減式のようなものを設定する必要がありません。

上のサンプルでは、ループの度に、連想配列fruitPriceに格納されたキーを、変数fNameに代入し、fruitPrice[fName]としてそのキーに紐付いたデータを取得しています。

キー自身も意味のあるデータであれば、このように出力テキストに加えることもできます。

上のソースコードを使って、実際にプログラムを作ってみました。
表示ボタンをクリックしてみて下さい。

果物の値段を表示します

 

 

ソースコードは次の通りです。

<script type="text/javascript">
function dispAry() {
    let fruitPrice =  {"りんご":350,
                       "みかん":380,
                       "ぶどう":580,
                       "もも ":490};

    document.getElementById("dat").innerHTML = "";

    for (let fName in fruitPrice) {
            document.getElementById("dat").innerHTML
                += fName
                   + " : "
                   + fruitPrice[fName]
                   + "円"
                   + "<br>";
            document.getElementById("dat").innerHTML +="<br>";
    }
}
</script>

<div style="background-color : #CCC; padding : 20px 20px 0px;">
    <form>
        <div style="display:inline-flex;">
            果物の値段を表示します
            <input type="button" value="表示" onClick="dispAry()">
        </div>
        <div id="dat" style="background-color : #EEE; width : 300px;"></div>
    </form>
</div>

▲目次へ戻る

無料説明会

SHARE

最新記事

無料説明会に参加してみる

INTERNOUS,inc. All rights reserved.

無料オンライン説明会へ