,如果我得到你想要acchieve什麼,但要做到這一點最簡單的方法是:
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;
}
}
JavaScript通過引用傳遞所有對象,因此,對ary中的對象所做的任何更改也會被引用到它的任何引用。 –
boomsauce,完美。我是在一個構造函數裏面做的,所以它變成了'this [obj ['type']] = obj'只要你確定它們是獨一無二的,那麼你很好 – Chris