【JavaScript】reduceで配列から辞書を作る【爆速】
JSで配列を加工して辞書オブジェクトを作りたいときに詰まったのでメモ
ここに書いてあることがやりたい
JavaScript: Map an array of objects to a dictionary - DEV Community
つまり、配列
[ {id: 1, country: 'Germany', population: 83623528}, {id: 2, country: 'Austria', population: 8975552}, {id: 3, country: 'Switzerland', population: 8616571} ]
から、それぞれの要素を加工してkey-valueにしたオブジェクト
{1: "Germany", 2: "Austria", 3: "Switzerland"}
に変換するようなことがやりたいとき、上記サイトに書いてある方法
let dictionary = data.reduce( (a,x) => ({...a, [x.id]: x.country}), {} )
を使うと実現できる。
しかし、毎回新しいオブジェクトを再生成するため、配列のサイズが大きくなると爆発的に遅くなる。 *1
そこで、オブジェクトを再生成せず利用し続けるようにすると、劇的に速くなる。 *2
let dictionary = data.reduce( (a,x) => { a[x.id] = x.country return a }, {} )