如何在JavaScript中将对象数组转换为映射对象?

如何将类似initialArray JSON对象的数组转换为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' } 

需要考虑的事项:

  • ID是字符串。
  • 我试着循环 – 无法让它工作 – http://jsfiddle.net/5af9R/23/

有任何想法吗?

您需要对数组中的对象进行操作,而不是对包含数组中的索引的字符串进行操作。

您还应该使用常规for循环来迭代数组。

你的JSFiddle,修复:

 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) );​ 

DEMO

您可以循环遍历数组,并为每个对象添加一个新属性到finalObject其属性名称为id,其值为name。

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

resp[key.id] = key.img;

你正确地称它为关键。 但是你需要一个价值;

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

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

此解决方案特定于特定问题的属性名称,但Array.prototype.reduce是我一直用于任何需要非数组结果的数组迭代的函数。

你没有使用For In正确的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) ); 

 for (var i=0; i 

如果我已经正确理解你可以做类似的事情

 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); 

DEMO

你谈到了json,但在你提供的小提琴中没有json甚至jquery没有被添加为资源所以我做了一些假设

今天我遇到了同样的问题,除了@adam-rackis的回答,我在这里找不到答案。

我发现的方式是:

 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; });