🖇️
APIレスポンスにありがちなObjectのArrayをreduce()でObjectに整形し直す
やりたいこと
タイトルのまんまですが、例えば下記のようなkey
、value
というプロパティを持つオブジェクトの配列が与えられたときに、{key1: value1, key2: value2, ...}
なオブジェクトを得たいケースがありました。
// もとの形
resp = [{key: 'animal', value: 'run'}, {key: 'fish', value: 'swim'}]
// ほしい形
ans = {animal: 'run', fish: 'swim'}
解法
いくらでもやり方はあると思いますが、勉強がてらreduce
を使って下記のように実装しました。
resp = [{key: 'animal', value: 'run'}, {key: 'fish', value: 'swim'}]
const reducer = (dict, current) => {
const key = current.key
const value = current.value
dict[key] = value
return dict
}
// callback, initialValue
ans = resp.reduce(reducer, {})
ポイントだなと思ったのは、reduce(callback, initialValue)
のinitialValue
として空のオブジェクトを指定することです。これを入れないと狙い通りに動作しません。
Discussion
こうも書けますね。
おお、ありがとうございます!