2015-06-29 33 views
0

我有這樣如何重新格式化這個javascript數組?

var item = [ 
      {'id': '1', 'quantity': '100'}, 
      {'id': '2', 'quantity': '200'} 
     ]; 

,但我需要改變這樣的格式

var new_item = { 
      '1': {'quantity': '100'}, 
      '2': {'quantity': '200'} 
     }; 

我做循環這樣的,但錯誤

for(i=0; i<item.length; i++){ 
      new_item = { 
       item[i].id: {'quantity': item[i].quantity} 
      }; 
     } 

我怎樣才能改變這種格式變量T__T

更新FIX:

哦是的,我只需要改變這樣的

for(i=0; i<item.length; i++){ 
      new_item[item[i].id] = {'quantity': item[i].quantity}; 
     } 

的工作,對不起,我該死的問題,我覺得我太困了,THX的傢伙^ _^

+1

這不是JSON(這是一個序列化格式)。這只是一個javascript對象數組。 –

+1

對象具有**字符串**鍵,而不是數字鍵。 – spender

+0

「但錯誤」??你應該分享你的這些錯誤的經驗。 – spender

回答

2

您需要使用括號表示法來設置派生鍵。首先初始化new_item = {}

new_item[item[i].id] = {quantity: item[i].quantity} 

請注意,如果你使用ECMAScript6可以使用computed property names in object initializers像這樣;

new_item = { 
    [item[i].id]: {quantity: item[i].quantity} 
} 

然而,這將覆蓋new_item每次所以它最終將只有所述陣列的最後一個值。

1
for(i=0; i<item.length; i++){ 
    new_item[item[i].id] = {'quantity': item[i].quantity}; 
} 
1

你可以做到這一點使用reduce如果你不需要IE 8支持:

var newItem = item.reduce(function (o, c) { 
    o[c.id] = c.quantity; 
    return o; 
}, {}); 
+0

woah cool thx ^^ –