どうも、ちょげ(@chogetarou)です。
オブジェクト(Object)の値(value)からキー(key)を検索して取得する方法を紹介します。
方法

オブジェクト(Object)の値(value)からキー(key)を検索して取得する方法は、3つあります。
find()
1つ目は、find()を使う方法です。
まず、Object.keys()を呼び出し、引数にオブジェクトを指定します。
Object.keys()からfind()を呼び出し、find()の引数に1つの引数を持つ関数を指定します。
関数で、「オブジェクトの引数のキーにアクセスした結果」と「検索対象の値」が等しい時にtrueとなる条件式を返します。
//obj(対象のオブジェクト)のvalue(検索対象)からキーを検索して取得
let result = Object.keys(obj).find(key => obj[key] === value);
上記のfind()は、オブジェクト(Object)の値からキーを検索して、そのキーを取得します。
使用例
type Numbers = {
[key: string]: number
}
const nums: Numbers = {
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
}
//3のキーを検索して取得
let result = Object.keys(nums).find(key => nums[key] === 3);
console.log(result);
出力:
[LOG]: "three"
filter()
2つ目は、filter()を使う方法です。
まず、Object.keys()を呼び出し、引数にオブジェクトを指定します。
Object.keys()からfilter()を呼び出し、filter()の引数に1つの引数を持つ関数を指定します。
関数で、「オブジェクトの引数のキーにアクセスした結果」と「検索対象の値」が等しい時にtrueとなる条件式を返します。
//obj(対象のオブジェクト)のvalue(検索対象)からキーを検索して取得
let result = Object.keys(obj).find(key => obj[key] === value);
上記のfind()は、オブジェクト(Object)の値からキーを検索して、そのキーを全て配列として取得します。
使用例
type Numbers = {
[key: string]: number
}
const nums: Numbers = {
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
}
//3のキーを検索して取得
let result = Object.keys(nums).filter(key => nums[key] === 3);
console.log(result);
出力:
[LOG]: ["three"]
ループ
3つ目は、ループを使う方法です。
まず、オブジェクト(Object)のキーをループします。
次に、if文で「オブジェクト[ループ変数] === 値
」を条件に分岐します。
if文の処理で、条件を満たしたキーを取得します。
//obj=対象のオブジェクト, value=検索対象の値
let result = '';
for (const key in obj) {
if (obj[key] === value) { //検索対象の値を検索
result = key; //値からキーを取得
}
}
//forEach()を使う場合
Object.keys(obj).forEach(function(key){
if (obj[key] === value) {
result = key;
}
});
上記のループは、オブジェクト(Object)の値からキーを検索して、そのキーを取得します。
使用例
type Numbers = {
[key: string]: number
}
const nums: Numbers = {
"one": 1,
"two": 2,
"three": 3,
"four": 4,
"five": 5,
}
let result = '';
for (const key in nums) {
if (nums[key] === 2) {
result = key;
}
}
console.log(result);
出力:
[LOG]: "two"
まとめ
オブジェクト(Object)の値(value)からキー(key)を検索して取得する方法は、次の3つです。
- find()を使う方法
let result = Object.keys(obj).find(key => obj[key] === value);
- filter()を使う方法
let result = Object.keys(obj).find(key => obj[key] === value);
- ループを使う方法
コメント