オブジェクトのバリューからキーを取得したいというシチュエーションはたまに発生しますね。

例えば、以下のようなオブジェクトがあったとして、

const fruit = {
  apple: 'red',
  grape: 'purple',
  lemon: 'yellow',
};

red と指定して apple を取得したい、みたいに。

そこまで難しい処理でもありませんが、ご参考までにここに記載しておきます。

JavaScript 版と TypeScript 版の両方を記載しておくので、お好きな方をお使いください。

JavaScript

const getKeyFromValue = (object, value) => {
  return Object.keys(object).find((key) => object[key] === value);
};

TypeScript

const getKeyFromValue = <T extends Record<string, unknown>>(
  object: T,
  value: T[keyof T]
): keyof T | undefined => {
  return Object.keys(object).find((key) => object[key] === value);
};

実行結果

ヒットしなかった場合は undefined が返ります。

getKeyFromValue(fruit, 'red'); // 'apple'
getKeyFromValue(fruit, 'blue'); // undefined