Object.fromEntries()
は、キーと値のペアのリスト(配列やMapなど)から新しいオブジェクトを作成するメソッドです。
逆の操作である Object.entries()
と組み合わせることで、オブジェクトの変換や加工が簡単に行えるようになります。
基本構文
Object.fromEntries(iterable)
-
iterable
とは
配列やMapなどの反復可能オブジェクト。各要素は[key, value]
形式の配列である必要があります。
戻り値:新しいオブジェクト
使用例1:配列からオブジェクトを作成
const entries = [['name', 'Alice'], ['age', 25], ['city', 'Tokyo']]
const obj = Object.fromEntries(entries)
console.log(obj)
// 出力: { name: 'Alice', age: 25, city: 'Tokyo' }
この例では、2要素の配列を複数集めた配列 entries
を Object.fromEntries()
に渡しています。
各要素は [key, value]
の形になっており、メソッドはこれを基に新しいオブジェクトを生成します。
結果として、name
、age
、city
のプロパティを持つオブジェクトが作成されます。
使用例2:Mapからオブジェクトを作成
const map = new Map()
map.set('id', 1)
map.set('role', 'admin')
const obj = Object.fromEntries(map)
console.log(obj)
// 出力: { id: 1, role: 'admin' }
Mapオブジェクトも反復可能で [key, value]
の形式を返すため、Object.fromEntries()
に直接渡せます。
この例では id
と role
の2つのエントリを持つMapからオブジェクトを作成しています。
Mapの順序は保持されるため、順番通りにプロパティが作られます。
使用例3:オブジェクトのフィルタリングに応用
const user = { name: 'Bob', age: 30, city: 'Osaka' }
const filtered = Object.fromEntries(
Object.entries(user).filter(([key, value]) => key !== 'age')
)
console.log(filtered)
// 出力: { name: 'Bob', city: 'Osaka' }
Object.entries()
でオブジェクトを [key, value]
配列に変換し、filter
を使って条件に合わない要素を除外しています。
ここでは age
プロパティを除外して新しいオブジェクトを作成しています。
Object.fromEntries()
と組み合わせることで、オブジェクトのフィルタリングや加工が簡単に行えます。
使用例4 : 配列要素 + 番号のペアをつくる
const textArray = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const textNumArray = Object.fromEntries(textArray.map((a, b) => [a, b]));
console.log(textNumArray);
// 出力: { a: 0, b: 1, c: 2, d: 3, e: 4, f: 5, g: 6 }
配列の要素をキー、インデックスを値としてオブジェクトに変換しています。
map
で [要素, インデックス]
の配列を作成し、それを Object.fromEntries()
に渡すことで、文字列の配列を番号付きオブジェクトに簡単に変換可能です。
この手法は、キーと値のペアを動的に生成したい場合に便利です。
注意点・エラー
1. 要素が [key, value]
の形式でない場合
- 例:
[1, 2, 3]
のような配列を渡すとエラー - 代替案: 配列を
[key, value]
の形に整形してから渡す
2. 非反復オブジェクトを渡す場合
- 例:
Object.fromEntries(123)
はエラー - 代替案:
Object.entries(obj)
で配列に変換してから渡す
3. キーが重複する場合
- 後の値が優先される
- 代替案: 必要に応じて
reduce
などで事前に重複を処理する