javascript reduceで オブジェクトの配列を、元のオブジェクトのidをキーnameを値にしたオブジェクトに詰め直し

文章にするとややこしいが、以下のオブジェクトの配列を

var in = [
{
  id   : 11       ,
  name : "みかん" ,
},
{
  id   : 21       ,
  name : "いちご" ,
},
{
  id   : 45       ,
  name : "バナナ" ,
}
]

以下のように変換したい

var out = {
  11 : "みかん",
  21 : "いちご",
  45 : "ばなな",
}

主には、プログラム内部で使っているオブジェクトから、セレクトボックスを作るときに使うキーバリューのオブジェクトを作るときに使う

var out = in.reduce((x,y)=>{x[y.id]=y.name;return x},{}));
console.log(out)

returnを省略したバージョン

var out = in.reduce((x,y)=>(x[y.id]=y.name) && x,{}));
console.log(out)

※ 注意!! x[y.id]=y.name の部分を()で括って(x[y.id]=y.name)
とすること、そうしないとy.name && xの方が先に処理される。
x[y.id]=y.nameの部分が、関数だったりメソッドだったりするときには()は必要ない。
代入文(=)のときだけ注意が必要。例えばx.concat(y.name)であれば大丈夫