javascript

ググったら出てきたコードを分解し少しずつ意味を理解していく。

function groupBy (array, property) {
  return array.reduce(
    (group, item) => Object.assign(group, {
      [item[property]]: (group[item[property]] || []).concat(item)
    }),
    {}
  )
}

Array.prototype.reduceは、配列の各値にアクセスし、最終的に1つの値を返す。

array.reduce((group, item) =>
  //何かしらの処理
             ,
             {})

最後の{}は返す値の初期値。
groupに入っているのは今までに評価された値。
itemには今評価している値が入っている。

(group, item) => Object.assign(group, {
      [item[property]]: (group[item[property]] || []).concat(item)
    })

Object.assign(A, B)はAオブジェクトにBオブジェクトをコピー(同一のキーは上書き)し、Aオブジェクトを返すもの。
propertyをキーとしたオブジェクトを作成し、groupのpropertyにもしオブジェクトがあればitemをそこに追加し、なければ空の配列にitemを突っ込んだものを使っている。