JavaScriptでSet(セット)をオブジェクトに変換する方法
JavaScriptでプログラムを作っていると、Set(セット)の中身をオブジェクトとして扱いたい場面に出くわすことがあります。本記事では、Object.assign()メソッドを使って、Setをオブジェクトに変換する方法を、具体的なコード例とともにわかりやすく解説します。
変換前のSetを用意する
まずは、例として使用するSetを用意しましょう。
var name = new Set(['John', 'David', 'Bob', 'Mike']);
Setからオブジェクトへの変換方法
Setをオブジェクトに変換するには、JavaScriptのObject.assign()を使用します。
var setToObject = Object.assign({}, ...Array.from(name, value => ({ [value]: 'not assigned' })));
この一行では、以下のような処理が行われています。
- Array.from():Setを配列に変換すると同時に、各値を { 値: 'not assigned' } という形式のオブジェクトへマッピングします。
- スプレッド構文(...):生成された複数のオブジェクトを展開します。
- Object.assign():展開されたすべてのオブジェクトを空のオブジェクト {} に統合し、最終的に1つのオブジェクトを作成します。
サンプルコード
実際のコードは以下の通りです。
var name = new Set(['John', 'David', 'Bob', 'Mike']);
var setToObject = Object.assign({}, ...Array.from(name, value => ({ [value]: 'not assigned' })));
console.log("The Set result=");
console.log(name);
console.log("The Object result=");
console.log(setToObject);
上記のプログラムを実行するには、Node.js環境で次のコマンドを使用します。
node fileName.js.
ここでは、ファイル名を demo260.js として保存しています。
実行結果
コンソールには、以下のような出力が表示されます。
PS C:\Users\Amit\javascript-code> node demo260.js
The Set result=
Set { 'John', 'David', 'Bob', 'Mike' }
The Object result=
{
John: 'not assigned',
David: 'not assigned',
Bob: 'not assigned',
Mike: 'not assigned'
}
このように、Setの各要素がキーとなり、それぞれ対応する値を持つオブジェクトが正しく生成されていることが確認できます。
補足:よりモダンな書き方
ES2019以降の環境では、Object.fromEntries()を使うことで、より簡潔に記述することも可能です。
const setToObject = Object.fromEntries( Array.from(name, value => [value, 'not assigned']) );
どちらの方法でも同じ結果が得られるため、プロジェクトの動作環境や可読性に応じて使い分けるとよいでしょう。
-
JavaScriptで配列内オブジェクトのプロパティ名を置き換える方法
JavaScriptでオブジェクト配列のプロパティ名を置き換える方法 JavaScriptでは、map()メソッドを活用することで、配列に含まれる各オブジェクトのプロパティ名を別の名前に簡単に置き換えることができます。map()は元の配列を変更せずに新しい配列を生成するため、安全かつ効率的なデータ変換処理に適しています。 以下は、オブジェクト配列のプロパティ名 name を fullName に置き換えるサンプルコードです。 サンプルコード <!DOCTYPE html> <html lang="en"> <head> <meta
-
文字列を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