JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptでマップ(辞書)のキーと値を取得する方法

辞書(ディクショナリ)型のデータを扱っていると、ある処理のために「キーだけ」を配列として取り出したい場面があります。JavaScriptでは、Object.keysメソッドを使うことで、オブジェクトが持つプロパティ(キー)を簡単に配列形式で取得できます。ここでは、このメソッドを利用して、独自のコンテナオブジェクトからキーの一覧を返す実装を見ていきましょう。

keys()メソッドの実装例

keys() {
    return Object.keys(this.container);
}

動作確認

実際に動作を確認してみます。

const myMap = new MyMap();
myMap.put("key1", "value1");
myMap.put("key2", "value2");

console.log(myMap.keys());

出力結果

[ 'key1', 'key2' ]

ES6のMapでキーを取得する

ES6で標準搭載されたMapオブジェクトにも、同じ目的で使えるkeys()メソッドが用意されています。ただし注意点として、このメソッドはMapIteratorオブジェクトを返します。返り値はそのまま配列のように扱えるわけではなく、Array.from()などで配列へ変換するか、通常のイテレータとして順次処理する必要があります。

const myMap = new Map([
    ["key1", "value1"],
    ["key2", "value2"]
]);

console.log(myMap.keys())

出力結果

MapIterator { 'key1', 'key2' }

配列として使いたい場合は、次のように変換すると便利です。

const keyArray = Array.from(myMap.keys());
console.log(keyArray); // [ 'key1', 'key2' ]

values()メソッドで値を取得する

逆に、キーではなく値だけが必要になるケースもあります。その場合は、辞書全体をループして各キーに対応する値を収集していきます。以下はその実装例です。

values() {
    let values = [];
    for (let key in this.container) {
        values.push(this.container[key]);
    }
    return values;
}

動作確認

const myMap = new MyMap();
myMap.put("key1", "value1");
myMap.put("key2", "value2");
console.log(myMap.values());

出力結果

[ 'value1', 'value2' ]

まとめ

ES6のMapにも、keys()と同様にvalues()メソッドが標準で用意されており、同じように利用できます。Object.keysによる自前実装と、ES6標準のMap、それぞれの特徴を理解しておくと、用途に応じて使い分けができるようになります。

  1. JavaScriptのgenerator.throw()メソッドの使い方を解説

    ```html generator.throw()メソッドとはgenerator.throw()メソッドは、一時停止中のyield式に対してエラーを送出するためのメソッドです。throw()が呼び出されると、ジェネレーターはあたかもyieldの位置で例外が発生したかのように実行を再開し、doneとvalueという2つのプロパティを持つオブジェクトを返します。このメソッドを使うと、ジェネレーターの外部から内部へ例外を注入できます。ジェネレーター内にtry...catchブロックが存在すれば、throw()で渡されたエラーはそのcatchブロックで捕捉されます。逆にcatchブロックがない場合は、

  2. JavaScriptのprompt()で入力した値を条件式で評価する方法

    prompt()で入力した値をJavaScriptの条件式で評価する JavaScriptでは、prompt()メソッドを使ってユーザーから値を入力してもらい、その値を条件式(if文)で評価することができます。この記事では、2つの数値を入力して掛け算した結果を条件判定する具体例を解説します。 ポイントは、parseInt()を使って入力された文字列を数値に変換している点です。prompt()の戻り値は常に文字列のため、そのまま計算すると意図しない結果になる可能性があります。 var firstvalue = parseInt(prompt(Enter the value1)); var sec