TypeScriptで利用できるデータ構造の1つに、Mapがあります。キーと値のペアを簡単に保存・取得できるオブジェクトです。JavaのHashMapのような他のプログラミング言語のMapに似た特徴を持ちます。
TypeScriptのMapは、キーと値のペアのコレクションを保存するためのオブジェクトで、任意のデータ型にすることができます。Mapを作成するには、Mapコンストラクタを呼び出して、キーと値のペアの配列を渡します。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
この例では、2つのキーと値のペアを持つ新しいMapオブジェクトを作成します。角括弧を使ってキーと値のペアの配列を作成し、最初の要素をキー、2番目の要素を値としています。
型を指定してMapオブジェクトを作成する例を見てみましょう。次の例ではキーが文字列型、値が数値型に指定されています。
const map = new Map<string, number>();
Note: 型を指定しないで空のMapオブジェクトを作成した場合キーと値の型はどちらもany型に推論されます。
TypeScriptでは、Mapに対していくつかの操作を行うことができます。よく使われる操作としては、以下のようなものがあります。
Mapを作成したら、setメソッドを使って新しいキーと値のペアを追加することができます。
const myMap = new Map<string, string>();
myMap.set('key1', 'value1');
myMap.set('key2', 'value2');
与えられたキーに対応する値を取り出すには、getメソッドを使用します。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
console.log(myMap.get('key1')); // 'value1'
has()メソッドは、特定のキーがMapオブジェクトに存在するかどうかを確認するために使用されます。このメソッドは、キーが存在すればtrue、そうでなければfalseを返します。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
console.log(myMap.has('key1')); // true
console.log(myMap.has('key3')); // false
delete()メソッドは、Mapオブジェクトから特定のキー、値のペアを削除するために使用されます。このメソッドは、キーと値のペアが正常に削除された場合はtrue、そうでない場合はfalseを返します。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
console.log(myMap.delete('key1')); // true
console.log(myMap); // Map(1) { 'key2' => 'value2' }
sizeプロパティは、Mapオブジェクト内のキー、値のペア数を取得するために使用されます。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
console.log(myMap.size); // 2
clear()メソッドは、Mapオブジェクトからすべてのキーと値のペアを削除するために使用されます。このメソッドは何も返しません。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
myMap.clear();
console.log(myMap.size); // 0
forEachメソッドを使えば、Mapを繰り返し処理することもできます。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
myMap.forEach((value, key) => {
console.log(`${key} = ${value}`);
});
for...ofを使用しても繰り返し処理を行うことができます。
const myMap = new Map([
['key1', 'value1'],
['key2', 'value2']
]);
for (const [key, value] of myMap) {
console.log(`${key} = ${value}`);
};
TypeScriptのメソッドは連結して使用することができ、Mapに対しても使用することができます。
const myMap = new Map();
myMap.set('key1', 'value1').set('key2', 'value2').set('key3', 'value3');
console.log(myMap); // Map (3) {"key1" => "value1", "key2" => "value2", "key3" => "value3"}
eコマースサイトにショッピングカートを導入する場合を考えてみましょう。ユーザーによって選択されたアイテムを、数量と価格とともに保存する必要があります。この情報を保存する一つの方法として、Mapオブジェクトを活用してみましょう。
interface itemInformation {
quantity: number;
price: number;
};
let cart = new Map<string, itemInformation>();
cart.set('item1', { quantity: 2, price: 10 });
cart.set('item2', { quantity: 1, price: 5 });
let totalPrice = 0;
for (const [key, value] of cart) {
totalPrice += value.quantity * value.price;
};
console.log(`Total price: $${totalPrice}`); // "Total price: $25"
上記のコードでは、新しいMapオブジェクトcartを作成しています。2つのアイテムを数量と価格とともにカートに追加しています。次に、Mapを繰り返し処理し、各アイテムの価格と数量を掛け合わせることで、カートの合計価格を計算します。