【TypeScript】オブジェクトのvalueからkey名を取得する方法

【TypeScript】オブジェクトのvalueからkey名を取得する方法

こんにちは!たぬきうどんです!

私は2018年に非IT業界から未経験でエンジニアに転職し、現在までエンジニアとして働いています。

この記事ではTypeScriptのオブジェクトのvalueからkey名を取得する方法について紹介します。

はじめに

TypeScriptでコード書いているときに、あるオブジェクトにおいて、valueからkey名を取得したいことはありませんか?

例えば、以下のような色名をkeyにカラーコードをvalueにとっているようなオブジェクトがあったときに、valueであるカラーコードからkeyである色名を取得したいということがあるかと思います。

TypeScript
type ColoCodeType = {
  black: string;
  red: string;
  blue: string;
  limeGreen: string;
  indigo: string;
};

const colorCode: ColoCodeType = {
  black: "#000000",
  red: "#ff0000",
  blue: "#0000ff",
  limeGreen: "#32cd32",
  indigo: "#4b0082",
};

今回はオブジェクトのvalueからkey名を取得する方法を紹介します。

実装

TypeScript
function getKeyNameByValue<T>(obj: T, matchingValue: string): string {
  let keyName = "";

  for (const [key, value] of Object.entries(obj)) {
    if (value === matchingValue) {
      keyName = key;
      break;
    }
  }
  return keyName;
};

Object.entries()オブジェクトが持つ文字列をKeyとした列挙可能なプロパティの組み合わせ[key, value]からなる配列を返すメソッドです。

型等は適宜変えてください。

上記のメソッドを実行した場合の例を以下にあげます。

TypeScript
type ColoCodeType = {
  black: string;
  red: string;
  blue: string;
  limeGreen: string;
  indigo: string;
};

const colorCode: ColoCodeType = {
  black: "#000000",
  red: "#ff0000",
  blue: "#0000ff",
  limeGreen: "#32cd32",
  indigo: "#4b0082",
};


function getKeyNameByValue(obj: ColoCodeType, colorCode: string): string {
  let keyName = "";

  for (const [key, value] of Object.entries(obj)) {
    if (value === colorCode) {
      keyName = key;
      break;
    }
  }
  return keyName;
};
 
const keyName = getKeyNameByValue(colorCode, "#4b0082");
console.log(keyName);

実行結果はindigoとなります。

おわりに…

以上がTypeScriptのオブジェクトのvalueからkey名を取得する方法 でした。

valueからkey名を取得したくなったらぜひご活用ください。

最後までご覧いただきありがとうございました!

コメントを残す

メールアドレスが公開されることはありません。