どうも、ちょげ(@chogetarou)です。
Map(マップ)の値(value)からキー(key)を検索して取得する方法を紹介します。
方法

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