JavaScriptで文字列からキーを持つオブジェクトを生成する方法
JavaScriptでは、文字列を引数として受け取り、その文字列に含まれるユニークな文字(重複しない一意の文字)をすべてキーとし、それぞれの値を 0 に初期化したオブジェクトを生成する関数が必要になることがあります。本記事では、そのような関数の実装方法をわかりやすく解説します。
やりたいことの確認
まず、関数は第一引数かつ唯一の引数として文字列を受け取り、次のような条件を満たすオブジェクトを返します。
- キー:文字列内に出現する各ユニークな文字
- 値:すべて
0に初期化
たとえば、入力文字列が以下の場合を考えてみましょう。
const str = 'hello world!';
期待される出力
この場合、出力されるオブジェクトは次のようになります。
const obj = { "h": 0, "e": 0, "l": 0, "o": 0, " ": 0, "w": 0, "r": 0, "d": 0, "!": 0 };
ポイントは、同じ文字は重複して登録されないことです。上記の例では l や o が複数回登場していますが、オブジェクトのキーとしては1度だけ存在しています。また、スペースや記号も通常の文字と同様に扱われる点に注意してください。
実装例:split() と reduce() を使う方法
この処理は、String.prototype.split() で文字列を1文字ずつの配列に分解し、Array.prototype.reduce() を使って配列をオブジェクトへ畳み込むことで、簡潔に実現できます。
const str = 'hello world!';
const stringToObject = str => {
return str.split("").reduce((acc, val) => {
acc[val] = 0;
return acc;
}, {});
};
console.log(stringToObject(str));
console.log(stringToObject('is it an object'));
コードの仕組み
str.split(""):文字列を空文字で分割し、['h', 'e', 'l', 'l', 'o', ...]のように1文字ずつの要素を持つ配列を作成します。reduce((acc, val) => {...}, {}):初期値として空のオブジェクト{}を指定し、配列の各文字valを順番に処理します。acc[val] = 0;:各文字をキーとして追加し、値を0に設定します。同じ文字が複数回現れても、既存のキーに対する代入となるため重複しません。- 最終的に完成したオブジェクトを
returnします。
コンソールでの出力結果
上記のコードを実行すると、コンソールには以下のように表示されます。
{ h: 0, e: 0, l: 0, o: 0, ' ': 0, w: 0, r: 0, d: 0, '!': 0 }
{ i: 0, s: 0, ' ': 0, t: 0, a: 0, n: 0, o: 0, b: 0, j: 0, e: 0, c: 0 }
代替案:for...of ループを使う方法
より直感的に書きたい場合は、for...of ループを使用することもできます。for...of は文字列を直接イテレートできるため、split() による配列化が不要になります。
const stringToObject = str => {
const obj = {};
for (const char of str) {
obj[char] = 0;
}
return obj;
};
どちらの方法でも結果は同一です。処理を関数型スタイルでまとめたいなら reduce()、可読性を優先するなら for...of がおすすめです。状況に応じて使い分けてください。
-
JavaScript関数からオブジェクトを返す方法をわかりやすく解説
JavaScriptの関数からオブジェクトを返すには、return文を使用します。オブジェクト内のプロパティやメソッドにアクセスする際は、thisキーワードを活用すると便利です。この記事では、実際のコード例を使いながら、JavaScript関数からオブジェクトを返す基本的な方法を解説します。基本的な考え方JavaScriptでは、オブジェクトの中にメソッド(関数)を定義できます。そのメソッド内でreturn文を使えば、処理結果や値を呼び出し元に返すことができます。また、thisキーワードを参照することで、同じオブジェクト内の他のプロパティにアクセス可能です。サンプルコード以下のコードでは、従業
-
文字列をJavaScriptオブジェクトに変換する方法【JSON.parse()の使い方】
JavaScriptでJSON形式の文字列をオブジェクトに変換するには、JSON.parse()メソッドを使用します。このメソッドは、引数に渡された文字列を解析(パース)し、対応するJavaScriptオブジェクトを返します。 サンプルコード <!DOCTYPE html> <html lang=ja> <head> <meta charset=UTF-8 /> <meta name=viewport content=width=device-width, initial-scale=1.0 /> <title>Docum