JavaScriptで辞書クラスを実装する方法|MyMapクラスの完全ガイド
辞書(Dictionary)は、キーと値のペアを格納するための基本的なデータ構造です。JavaScriptには標準でMapオブジェクトが用意されていますが、独自の辞書クラスを実装することで、内部の仕組みを深く理解でき、動作を自由にカスタマイズすることも可能になります。
ここでは、プレーンなオブジェクトを内部コンテナとして利用した、MyMapクラスの完全な実装を紹介します。
MyMapクラスの完全な実装
以下がMyMapクラスの完全な実装コードです。
class MyMap {
constructor() {
this.container = {};
}
display() {
console.log(this.container);
}
hasKey(key) {
return key in this.container;
}
put(key, value) {
this.container[key] = value;
}
delete(key) {
if (this.hasKey(key)) {
delete this.container[key];
return true;
}
return false;
}
get(key) {
return this.hasKey(key) ? this.container[key] : undefined;
}
keys() {
return Object.keys(this.container);
}
values() {
let values = [];
for (let key in this.container) {
values.push(this.container[key]);
}
return values;
}
clear() {
this.container = {};
}
forEach(callback) {
for (let prop in this.container) {
// callback(key, value) の形式でコールバックを呼び出す
callback(prop, this.container[prop]);
}
}
}各メソッドの解説
constructor() – 初期化
コンストラクタでは、空のオブジェクトをcontainerとして初期化します。このオブジェクトが、キーと値のペアを格納する内部ストレージの役割を担います。
hasKey(key) – キーの存在確認
in演算子を使って、指定したキーがコンテナ内に存在するかどうかを判定します。存在すればtrue、存在しなければfalseを返します。
put(key, value) – 値の設定
指定したキーに値を設定します。すでに存在するキーが指定された場合は、新しい値で上書きされます。
get(key) – 値の取得
指定したキーに対応する値を取得します。キーが存在しない場合はundefinedを返すため、安全にアクセスできます。
delete(key) – 要素の削除
指定したキーとその値を削除します。削除に成功した場合はtrueを、キーが存在しない場合はfalseを返します。
keys() – すべてのキーを取得
Object.keys()を利用して、コンテナ内のすべてのキーを配列として返します。
values() – すべての値を取得
for...inループでコンテナを走査し、すべての値を配列に格納して返します。
clear() – 全要素の削除
コンテナを空のオブジェクトで再初期化し、格納されているすべての要素を一括で削除します。
forEach(callback) – 全要素の反復処理
コールバック関数を引数に受け取り、各キーと値のペアに対してcallback(key, value)の形式で呼び出します。これにより、すべての要素に対する処理を簡潔に記述できます。
使用例
実際の使い方は以下のようになります。
const map = new MyMap();
map.put("name", "太郎");
map.put("age", 25);
console.log(map.get("name")); // "太郎"
console.log(map.hasKey("age")); // true
map.forEach((key, value) => {
console.log(key, value);
});
map.delete("age");
map.display(); // { name: "太郎" }補足:組み込みのMapオブジェクトとの違い
実務の開発では、ES6(ES2015)で導入された組み込みのMapオブジェクトを使うのが一般的です。Mapはオブジェクトや関数など任意の型をキーとして扱え、挿入順序を保持するなど、より高機能です。一方、このような独自クラスの実装は、データ構造の学習や特殊な要件への対応に役立ちます。まずは基本の仕組みを理解したうえで、用途に応じて使い分けるとよいでしょう。
-
【初心者向け】JavaScriptのcontinueステートメントの使い方を解説
continueステートメントとはJavaScriptのcontinueステートメントは、ループ処理の中で特定の条件が満たされた場合に、その回の処理(イテレーション)をスキップし、次の反復へ処理を移すために使用されます。breakステートメントがループ自体を抜けるのに対し、continueはあくまで「その回だけ」を飛ばしてループを継続する点が特徴です。この仕組みにより、不要なデータを除外しながら効率的に繰り返し処理を行うことができます。continueステートメントの実装例以下は、1から30までの数値の中から偶数のみを出力するサンプルコードです。奇数の場合にcontinueを使って処理をスキッ
-
JavaScriptのnew.targetメタプロパティとは?使い方をわかりやすく解説
JavaScriptのnew.targetとはnew.targetは、関数やコンストラクタが実行時にnewキーワードを使って呼び出されたかどうかを判定できるメタプロパティです。通常、関数をnewをつけずに呼び出すと、コンストラクタとして意図された関数でも単なる通常の関数として実行されてしまい、グローバルオブジェクトにプロパティが設定されるなどの予期しない動作を引き起こす可能性があります。new.targetを利用することで、このような誤用を検出し、エラーとして通知することができます。new演算子とともに呼び出された場合、new.targetは呼び出されたコンストラクタ自身への参照を返します。一