あなたが達成しようとしていることを私が理解できるかどうかはわかりませんが、これを行う最も簡単な方法は次のとおりです。
var theObj = {};
for(var i=0;i<ary.length;i++)
{
theObj[ary[i].type] = ary[i];
}
ここでの心配は、ary
変数を変更することにより、誤ってtheObj
:を変更することです。
console.log(theObj.walrus.name);//Outputs: GorbyPuff
ary[0].name = 'Nips!';
console.log(theObj.walrus.name);//Outputs: Nips! <-- objects are passed by reference, always
変数が関数スコープのary
一部であり、結果のオブジェクトがその戻り値である場合、心配する必要はありません。しかし、両方がグローバルスコープの一部である場合(そうではないはずですが、それは悪い習慣です)、これは問題になります。
したがって、私はこのアプローチを提案します。
var obj = {};
var i;
while (ary.length !== 0)
{
i = ary.splice(0,1)[0];//removes element from array
if (i.hasOwnProperty('type'))//always best to check the property you're going to use is there
{
obj[i.type] = i;
}
}