icon
icon

JavaScriptで連想配列のキーの存在チェックの方法を現役エンジニアが解説【初心者向け】

初心者向けにJavaScriptで連想配列のキーの存在チェックの方法について現役エンジニアが解説しています。連想配列とは、キーと値を持ったデータ構造のことを指します。キーの存在チェックの方法には、if文でチェックする方法やin演算子を使用する方法があります。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査


JavaScriptで連想配列のキーの存在チェックの方法について解説します。
実際のコードをもとに解説していきますので、理解を深めていきましょう。

また、入門向けのJavaScriptを学習できるサイトも紹介しているので、合わせてご覧ください。

目次

1時間でできる無料体験!

そもそもJavaScriptについてよく分からないという方は、JavaScriptとは何なのかについて解説した記事を読むとさらに理解が深まります。

 

田島悠介

今回は、JavaScriptに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

JavaScriptで連想配列のキーの存在チェックの方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

JavaScriptの連想配列とは

連想配列は、JavaScriptでデータを管理するときの構造の1つです。

値のみを並べる通常の配列とは違い、「キー」と「値」が一対の関係となって定義されています。

const data = {
    キー1: 値1, //キー1にひもづく値は、値1である
    キー2: 値2
}

この構造のメリットは、「その値が何を意味するのかを明確にしてデータを管理できること」です。

 

例えば、あるWebサービスに登録されたユーザーの情報を連想配列にすると、以下の通りそれがどんな情報であるのか一目瞭然です。

const user = {
  id: 1,
  name: 'Taro',
  age: '20'
  email: 'xxxxx@xx.xx'
}
// *実際のサービスでユーザー情報を管理する際は、セキュリティに十分配慮しましょう。

 

連想配列の文法

名前こそ「連想配列」ですが、その文法はJavaScriptのオブジェクトそのものです。

通常の配列と異なり、[]ではなく{}で囲っている点に注意しましょう。

連想配列の値は、オブジェクトに対してキーを参照することで呼び出せます。

具体的には、.(ドット記法)で呼び出す方法と、[](ブラケット記法)で呼び出す方法とがあります。

 

以下は連想配列から値を呼び出す一例です。

const fruits = {
    apple: "りんご",
    orange: "オレンジ"
}

//単純にキーの名前で呼び出すときは、ドット記法
fruits.apple //りんご

//変数を使ってキーを参照したい場合は、ブラケット記法
const key = "orange"
fruits[key] //オレンジ

 

[PR] フロントエンドで副業する学習方法を動画で公開中

連想配列のキーの存在チェックとは

「キーの存在チェック」についてイメージを持つために、まずは以下のコードを見てください。

const fruits = {
    apple: {
        name: "りんご",
        price: "300"
    }
}

連想配列の値には、文字列や数値だけでなくオブジェクトを指定することもできます。

上記の例では、appleというキーに対して、nameとpriceのデータを持つオブジェクトが定義されていますね。

 

それでは、ここで以下のように呼び出すとどうなるでしょうか。

fruits.orange.price //Uncaught TypeError: Cannot read property 'price' of undefined

fruitsという連想配列にorangeというキーが存在しないため、「存在しないpriceなんて呼び出せない」というエラーが出ました。
※このエラーについての詳細な解説は、こちらの記事を参照してください。

こうしたエラーを避けるためには、処理を行う前にキーが実際に存在するのかチェックすると安全です。

 

それでは次の章で、具体的なキーの存在チェックの方法について見ていきましょう。

 

コラム

コスパとタイパ、両方結果的に良くなる良くなる学び方とは?

「スクールは高いし時間も縛られて効率が悪い」と考える方は多いと思います。
もちろん、時間も費用もかかることは間違いありません。
ただ 結果的に無駄な学びにお金も時間もかける方がリスクが高いという考えもあります。

コスパ・タイパ最適化の参考として、 テックアカデミー卒業生がスクールを選んだ理由 をご紹介します。

  • ・困ったときに、質問や相談できる相手がいるため挫折しなかった
  • ・プロとして必要なスキルのみを深く学べたので無駄がなかった
  • ・副業案件の提供と納品までのサポートがあったので目的を達成できた

安価・短期間で広く浅く学んでも意味がありません。 本当に自分の目的が達成できるか、それが重要です。
自分にどのスキルや学び方が合っているか、どんな学習方法かなど、お気軽に 無料相談 に参加してみませんか?

カウンセラー・現役のプロへ、何でも気軽に無料相談可能。 30分か60分お好きな時間が選べて、かつ3回まで すべて無料で ご利用できます。
無理な勧誘は一切ない ので、お気軽にご参加ください。

今なら相談した方限定の割引・参加特典付き! 無料相談はこちら

連想配列のキーの存在チェックの方法

連想配列のキーが存在するかを判定する一番シンプルな方法は、if文とin演算子を利用した記述です。

if (orange in fruits) {
    //orangeというキーが存在する場合の処理
    console.log(fruits.orange.price)
} else {
    //orangeというキーが存在しない場合の処理
    console.log("orangeの情報がありません")
}

キー in オブジェクトの形式で判定することで、そのオブジェクトに指定したキーがあればtrue、なければfalseが返ります。

 

なお、従来の方法として、以下のような記述もあります。

if (fruits.orange) {
    //存在する場合の処理
} else {
    //存在する場合の処理
}

 

この方法の欠点として、”” (空文字)や0(ゼロ)もfalseとして判定されてしまう点があります。

const scores: {
    total: 0
}

//このif文は、falseになってしまう!
if (scores.total) {
}

 

したがって、「キーの存在チェック」という目的においてはin演算子を利用すると安全です。

 

実際に書いてみよう

連想配列のキーの存在チェックが必要になるのは、参照するキーの内容が通信やユーザー操作によって変動する場合が多いです。

(最初から参照する内容が決まっているなら、存在しないというケースはなくなりますね。)

 

今回は、学校の先生が生徒のテストの点数を検索する際、検索した氏名にひもづくデータがあればその点数を表示し、なければ「検索結果がありません」と表示するプログラムを書いてみましょう!

動作イメージは次のとおりです。

 

それでは、実際のコードです。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
</head>
<body>
    <input type="text" id="student-name" placeholder="生徒の氏名を入力">
    <button type="button" id="search">検索</button>
    <script> 
        //検索欄を取得
        const studentName = document.getElementById("student-name");
        //検索ボタンを取得
        const searchButton = document.getElementById("search");
        //生徒の氏名にひもづく点数のデータ
        const scoreData = {
            //キーに日本語の文字列も指定できる
            "田中": 90,
            "鈴木": 80,
            "佐藤": 70 
        } 
        //検索ボタンを押した時の処理
        searchButton.addEventListener('click', () => {
            //検索ワードを取得
            const name = studentName.value;

            //scoreDataにnameが指すキーが存在するかチェック
            if (name in scoreData) {
                console.log(`${name}さんの点数は、${scoreData[name]}点です`) }
            else { 
                console.log("検索結果はありません")
            } 
        })
    </script>
</body>
</html>

ポイントは、以下の部分です。

//scoreDataにnameが指すキーが存在するかチェック
if (name in scoreData) {
    console.log(`${name}さんの点数は、${scoreData[name]}点です`) }
else { 
    console.log("検索結果はありません")
}

キー in オブジェクト の文法を利用して、氏名のキーが存在するかをチェックしています。

 

今回の解説は以上です!

 

高田悠(たかだゆう)

JavaScriptを用いた実装など、フロントエンド領域の開発が得意。

なかでもWeb上での3D表現に興味があり、これまでにWebAR(AR=拡張現実)の実装案件を複数経験。

ワークライフバランスを重視し、趣味の音楽活動や釣りを楽しみつつフリーランス生活を送っている。

 

大石ゆかり

内容が分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

テックアカデミーでは、初心者でもJavaScript・jQueryを使ったWebサービス公開を習得できるオンラインブートキャンプJavaScript/jQuery講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する