JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptのオブジェクトで値からキーを取得する方法

JavaScriptでは、「値」を手がかりに「キー」を逆引きしたい場面がよくあります。例えば、次のように配列を値として持つオブジェクトがあったとしましょう。

const obj = {
  'key1': ['value11', 'value12', 'value13', 'value14', 'value15'],
  'key2': ['value21', 'value22', 'value23', 'value24', 'value25',
           'value26', 'value27'],
  'key3': ['value31', 'value32', 'value33', 'value34'],
  'key4': ['value41', 'value42'],
};

ここで必要になるのは、第一引数にこのようなオブジェクト、第二引数に検索したい値の文字列を受け取る関数です。この関数は、渡された値がどのキーに属しているのかを判定し、そのキー名を返す必要があります。

// 'value13' を渡した場合 → 返り値は 'key1'
// 'value32' を渡した場合 → 返り値は 'key3'

実装例

実際のコードは次のようになります。考え方はシンプルで、for...in ループでオブジェクトの各キーを順番に取り出しながら、indexOf() メソッドを使って対応する配列の中に目的の値が存在するかどうかを確認していきます。

const obj = {
  'key1': ['value11', 'value12', 'value13', 'value14', 'value15'],
  'key2': ['value21', 'value22', 'value23', 'value24', 'value25',
           'value26', 'value27'],
  'key3': ['value31', 'value32', 'value33', 'value34'],
  'key4': ['value41', 'value42'],
};

const searchByValue = (obj, val) => {
  for (let key in obj) {
    if (obj[key].indexOf(val) !== -1) {
      return key;
    }
  }
  return null;
};

console.log(searchByValue(obj, 'value32'));

ポイントは、値が見つからなかった場合に備えて null を返すようにしている点です。これにより、呼び出し側で「該当なし」のケースも簡単にハンドリングできます。なお、ES2023以降の環境であれば Object.keys(obj).find(key => obj[key].includes(val)) ?? null のように、より簡潔に書くことも可能です。

出力結果

上記のコードを実行すると、コンソールには次のように出力されます。

key3
  1. JavaScriptでXMLデータから属性の値を取得する方法

    JavaScriptでXMLデータから属性の値を取得するには、attr()メソッドを使用します。このメソッドは、指定した属性名に対応する値を簡単に取り出すことができる便利な機能です。 attr()メソッドとは attr()はjQueryが提供するメソッドの一つで、XMLやHTML要素から指定した属性の値を取得できます。XMLデータをjQueryオブジェクトとして扱うことで、DOM操作と同じ感覚で属性へアクセスできるのが特徴です。 サンプルコード 以下のコードでは、ゲーム情報を含むXMLデータから「details」属性の値を取得しています。 <!DOCTYPE html> <h

  2. JavaScriptでhref属性の値を取得する方法|jQueryのattr()メソッド活用ガイド

    Web開発では、アンカータグ(<a>)に設定されたリンク先URL、つまりhref属性の値を取得したい場面がよくあります。この記事では、jQueryのattr()メソッドを使って、簡単にhrefの値を取得する方法を解説します。対象となるHTMLの例たとえば、以下のようなアンカータグがあったとします。<a class=demo title=get the url href=./mainPage.jsp/1245>href value at console</a>ここで必要なのは、テキスト部分ではなく、URLそのもの、すなわちhref属性の値「./mainPage