【TypeScript】Objectの配列をスマートにDictionaryに変換したい
オブジェクトの配列をDictionaryに変換する際に、下記のようにObject.assign
で変換していましたが、もっとスマートな書き方があったのでメモしておきます。
const params = [ { key: 'hoge', value: 'value' }, { key: 'hoge2', value: 'value' } ] const dicParams: { [index: string]: string } = Object.assign( {}, ...params.map(x => ({ [x.key]: x.value })) )
結論
下記のようにObject.fromEntries
関数で、スマートに変換することができました。Object.fromEntries
はキーと値の配列の組み合わせをDictionaryに変換できるメソッドで、今回の場合は、オブジェクトの配列を、キーと値の配列に変換して渡すことで、Object.fromEntries
を使えるようにしています。
const params = [ { key: 'hoge', value: 'value' }, { key: 'hoge2', value: 'value' } ] const dicParams = Object.fromEntries(params.map(obj => [obj.key, obj.value]))
ちなみに、Object.fromEntries
はes2019
で利用可能なので、tsconfig.json
のcompilerOptions > lib
に、es2019
をよしなに追加する必要があります。
参考
- https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries
- https://zenn.dev/terrierscript/articles/2021-04-02-java-script-object-entities