¿Cómo convertir una matriz de objects en un object mapeado en JavaScript?

¿Cómo puedo convertir algo así como initialArray array de objects JSON en el map finalObject ?

 var initialArray = [ { id:'id1', name:'name1' }, { id:'id2', name:'name2' }, { id:'id3', name:'name3' }, { id:'id4', name:'name4' } ]; var finalObject = { 'id1':'name1', 'id2':'name2', 'id3':'name3', 'id4':'name4' } 

Cosas para considerar:

  • Los ID son cadenas.
  • Intenté en el bucle – no pude hacerlo funcionar – http://jsfiddle.net/5af9R/23/

¿Algunas ideas?

Necesita operar los objects en su matriz, no las cadenas que contienen sus índices en la matriz.

También debería usar un ciclo for para iterar sobre una matriz.

Su JSFiddle, reparado:

 var x = [ {id:'1', img:'img1'}, {id:'2', img:'img2'}, {id:'3', img:'img3'} ]; var resp = {}; for( var i = 0 ; i < x.length ; i++ ){ var obj = x[i]; resp[obj.id] = obj.img; } document.write( JSON.stringify(resp, undefined, 2) );​ 

MANIFESTACIÓN

Puede recorrer la matriz y, para cada object, agregar una nueva propiedad a finalObject cuyo nombre de propiedad es la identificación, y cuyo valor es el nombre.

 var finalObject = {}; for (var i = 0, max = initialArray.length; i < max; i++) finalObject[initialArray[i].id] = initialArray[i].name; 

resp[key.id] = key.img;

Lo llamas correctamente key. Pero necesitas un valor;

resp[x[key].id] = x[key].img;

 var finalObject = initialArray.networkinguce(function(ret, obj){ ret[obj.id] = obj.name; return ret; }, {}); 

Esta solución es específica de los nombres de propiedad para la pregunta específica, pero Array.prototype.networkinguce es una function que uso todo el time para cualquier tipo de iteración de matriz que requiera un resultado que no sea de matriz.

No estás usando For In correctamente jsFiddle

 var x = [ {id:'1', img:'img1'}, {id:'2', img:'img2'}, {id:'3', img:'img3'} ]; var resp = {}; for( var key in x ){ resp['id' + x[key].id] = x[key].img; } document.write( JSON.stringify(resp, undefined, 2) ); 

1.

 for (var i=0; i<x.length; i++) { var id = 'id' + x[i].id; var img = x[i].img; resp[id] = img; } 

si he entendido bien, puedes hacer algo como

 var x =' [ {"id":"1", "img":"img1"}, {"id":"2", "img":"img2"}, {"id":"3", "img":"img3"}]'; var resp = {}; var json = $.parseJSON(x); $(json).each(function(i,v){ resp[v.id]=v.img; }); console.log( resp); 

MANIFESTACIÓN

hablaste de json, pero en el violín que proporcionaste no había json, incluso jquery no se agregó como recurso, así que hice algunas suposiciones

Hoy estaba en la misma pregunta y no encontré una respuesta aquí, excepto la respuesta de @ adam-rackis.

La forma en que encontré es:

 var initialArray = [ { id:'id1', name:'name1' }, { id:'id2', name:'name2' }, { id:'id3', name:'name3' }, { id:'id4', name:'name4' } ], finalObject = {}; $.each(initialArray, function(k,v) { finalObject[v.name] = v.value; });