[TypeScript]Map(マップ)の値からキーを検索して取得するには?

TypeScript

どうも、ちょげ(@chogetarou)です。

Map(マップ)の値(value)からキー(key)を検索して取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

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);
  • ループを使う方法

コメント

タイトルとURLをコピーしました