[JavaScript]Map(マップ)の値からキーを取得するには?

JavaScript

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

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

スポンサーリンク

方法

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

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);

コメント

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