2012-03-02 65 views
4

如何将initialArray类似JSON对象的数组转换为finalObject图?如何在JavaScript中将对象数组转换为映射对象?

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' 
       } 

需要考虑的事情:

任何想法?

+2

这些只是JavaScript对象,有一个在您输入任何JSON。 – Quentin 2012-03-02 21:04:03

回答

3

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

您还应该使用常规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)); 
​ 
1

resp[key.id] = key.img;

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

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

2

DEMO

您可以循环在阵列上,并为每个对象,一个新的属性添加到finalObject其属性名称是id,其值在名称。

var finalObject = {}; 

for (var i = 0, max = initialArray.length; i < max; i++) 
    finalObject[initialArray[i].id] = initialArray[i].name; 
1
var finalObject = initialArray.reduce(function(ret, obj){ 
    ret[obj.id] = obj.name; 
    return ret; 
}, {}); 

该解决方案是专门针对于特定问题的属性名称,但Array.prototype.reduce是我用所有的时间对于任何类型的阵列的功能迭代需要一个非数组结果。

1

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

+0

只需要删除'id'+部分,这正是我需要的。谢谢! – Sherzod 2012-03-02 21:42:05

+0

当我回答时,你的问题明确指出你想'id1':'name1',并且你的initialArray = [{id:'1',name:'name1'},所以需要'id'前缀。当我创建我的jsFiddle时,我没有改变你的初始数组;) – Sinetheta 2012-03-02 23:12:21

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

如果我理解正确的话,你可以这样做

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的不作为资源添加,所以我提出了一些假设

0

今天我是同样的问题,我没有找到这里的答案除了@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; 
}); 
相关问题