я не уверен, если я получаю то, что вы пытаетесь 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, безупречный. Я делал это внутри конструктора, поэтому оказалось, что это «это [obj ['type]] = obj' Пока вы уверены, что они уникальны, вы хороши – Chris