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

Map(マップ)の値からキーを取得する方法は、3つあります。
ループ
ひとつめは、ループを使う方法です。
まず、for…of文でMapをループします。
ループ処理で、2つ目のループ変数が対象の値と等しい時に条件分岐します。
そして、条件分岐で1つ目のループ変数を取得します。
//map=対象のマップ, x=対象の値
function getKey(map, x) {
for (let [key, value] of map) {
if (value == x) {
return key;
}
}
}
上記の1つ目のループ変数を取得することで、Map(マップ)の値からキーを取得できます。
使用例
function getKey(map, x) {
for (let [key, value] of map) {
if (value == x) {
return key;
}
}
}
const nums = new Map();
nums.set("one", 1);
nums.set("two", 2);
nums.set("three", 3);
nums.set("four", 4);
nums.set("five", 5);
console.log(getKey(nums, 1));
console.log(getKey(nums, 4));
console.log(getKey(nums, 5));
出力:
one
four
five
find()
ふたつめは、find()を使う方法です。
まず、Mapをスプレッド構文で配列に変換します。
変換した配列からfind()を呼び出します。
find()の引数に「([key, value]) => value == x
」(x=対象の値)を指定します。
そして、find()の結果のインデックス「0」にアクセスします。
//map=対象のマップ, x=対象の値
let key = [...map].find(([key, value]) => value == x)[0];
上記のfind()のインデックス「0」にアクセスすることで、Mapの値からキーを取得できます。
使用例
function getKey(map, x) {
return [...map].find(([key, value]) => value == x)[0];
}
const nums = new Map();
nums.set("one", 1);
nums.set("two", 2);
nums.set("three", 3);
nums.set("four", 4);
nums.set("five", 5);
console.log(getKey(nums, 1));
console.log(getKey(nums, 4));
console.log(getKey(nums, 5));
出力:
one
four
five
filter()
みっつめは、filter()を使う方法です。
まず、Mapをスプレッド構文で配列に変換します。
変換した配列からfilter()を呼び出します。
find()の引数に「([key, value]) => value == x
」(x=対象の値)を指定します。
そして、filter()からmap()を呼び出し、引数に「([k]) => k
」を指定します。
//map=対象のマップ, x=対象の値
let key = [...map].filter(([key, value]) => value == x).map(([k]) => k);
上記のmap()は、対象のMapの値からキーを配列として取得します。
使用例
function getKey(map, x) {
return [...map].filter(([key, value]) => value == x).map(([k]) => k);;
}
const nums = new Map();
nums.set("one", 1);
nums.set("いち", 1);
nums.set("two", 2);
nums.set("three", 3);
nums.set("four", 4);
nums.set("five", 5);
nums.set("ご", 5);
nums.set("五", 5);
console.log(getKey(nums, 1));
console.log(getKey(nums, 4));
console.log(getKey(nums, 5));
出力:
[ 'one', 'いち' ]
[ 'four' ]
[ 'five', 'ご', '五' ]
まとめ
Map(マップ)の値からキーを取得する方法は、次の3つです。
- ループを使う方法
- find()を使う方法
let key = [...map].find(([key, value]) => value == x)[0];
- filter()を使う方法
let key = [...map].filter(([key, value]) => value == x).map(([k]) => k);
コメント