イテレータを使ってTypeScript Mapを反復処理する方法
TypeScript Mapの反復処理
イテレータの種類
Mapには、以下の3種類のイテレータがあります。
keys()
:キーのみをイテレートするentries()
:キーと値のペアをイテレートする
イテレータの使い方
イテレータは、for...of
ループを使用して使用することができます。
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
// キーのみをイテレートする
for (const key of myMap.keys()) {
console.log(key); // 'a', 'b', 'c'
}
// 値のみをイテレートする
for (const value of myMap.values()) {
console.log(value); // 1, 2, 3
}
// キーと値のペアをイテレートする
for (const [key, value] of myMap.entries()) {
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
}
その他のイテレータ
Mapには、forEach()
メソッドなど、イテレータを使用する他の方法もあります。
myMap.forEach((value, key) => {
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
});
Mapの反復処理は、イテレータを使用して行うことができます。イテレータには、keys()
、values()
、entries()
の3種類があります。これらのイテレータは、for...of
ループを使用して使用することができます。
補足
イテレータは、next()
メソッドを持つオブジェクトです。next()
メソッドを呼び出すと、イテレータの次の要素が返されます。イテレータに次の要素がない場合は、next()
メソッドはdone
プロパティがtrue
のオブジェクトを返します。
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
const iterator = myMap.entries();
let result = iterator.next();
while (!result.done) {
const [key, value] = result.value;
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
result = iterator.next();
}
イテレータは、以下の利点があります。
- コードをより簡潔に記述できる
- 効率的に要素を処理できる
- メモリ使用量を抑えられる
その他のイテレータ
Map以外にも、Array、Set、Stringなどのオブジェクトもイテレータを使用することができます。
keys()、values()、entries()の使用例
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
// キーのみをイテレートする
for (const key of myMap.keys()) {
console.log(key); // 'a', 'b', 'c'
}
// 値のみをイテレートする
for (const value of myMap.values()) {
console.log(value); // 1, 2, 3
}
// キーと値のペアをイテレートする
for (const [key, value] of myMap.entries()) {
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
}
forEach()の使用例
myMap.forEach((value, key) => {
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
});
イテレータの詳細
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
const iterator = myMap.entries();
let result = iterator.next();
while (!result.done) {
const [key, value] = result.value;
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
result = iterator.next();
}
その他のイテレータ
const myArray = ['a', 'b', 'c'];
// Arrayのイテレート
for (const element of myArray) {
console.log(element); // 'a', 'b', 'c'
}
const mySet = new Set(['a', 'b', 'c']);
// Setのイテレート
for (const element of mySet) {
console.log(element); // 'a', 'b', 'c'
}
const myString = 'abc';
// Stringのイテレート
for (const char of myString) {
console.log(char); // 'a', 'b', 'c'
}
Mapの反復処理のその他の方法
reduce()
メソッドを使用して、Mapの要素を累積的に処理することができます。
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
const sum = myMap.reduce((accumulator, currentValue, currentKey) => {
return accumulator + currentValue;
}, 0);
console.log(sum); // 6
for...in
ループを使用して、Mapのキーをループ処理することができます。
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
for (const key in myMap) {
console.log(key); // 'a', 'b', 'c'
}
ただし、for...in
ループはMapの値を直接ループ処理することはできません。値を取得するには、get()
メソッドを使用する必要があります。
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
for (const key in myMap) {
const value = myMap.get(key);
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
}
Object.keys()
メソッドを使用して、Mapのキーの配列を取得することができます。
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
const keys = Object.keys(myMap);
for (const key of keys) {
console.log(key); // 'a', 'b', 'c'
}
const myMap = new Map([
['a', 1],
['b', 2],
['c', 3],
]);
const keys = Object.keys(myMap);
for (const key of keys) {
const value = myMap.get(key);
console.log(key, value); // 'a' 1, 'b' 2, 'c' 3
}
Mapの反復処理には、さまざまな方法があります。どの方法を使用するかは、処理内容や目的に応じて選択する必要があります。
typescript dictionary iterator