2012-03-02 88 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; 
}); 
相關問題