配列をオブジェクトに変換する(es2015 ver)


const arr = [
  {
    id: 'cd',
    name: 'Clarice Dillard'
  }, {
    id: 'nb',
    name: 'Noel Bond'
  }, {
    id: 'sd',
    name: 'Sheree Dunn'
  }
];

という形のオブジェクトをメンバーにもつ配列を

obj = {
  cd: {
    id: "cd",
    name: "Clarice Dillard"
  },
  nb: {
    id: "nb",
    name: "Noel Bond"
  },
  sd: {
    id: "sd",
    name: "Sheree Dunn"
  }
}

という感じのオブジェクトに変換したい、できるだけスッキリ書きたい、という話

const obj = arr.reduce(
  (o, c) => Object.assign(o, {[c.id]: c}),
  {}
)

Object Rest/Spread Propertiesを使ったver

もう少し短くかける

const obj = arr.reduce(
  (o, c) => ({...o, [c.id]: c}),
  {}
)

再び配列に戻したいとき

Object.keys()Array.map()でいまのとこやってる

const arr2 = Object.keys(obj).map(k => obj[k])