2016-05-06 61 views
2

我目前的JSON結構如下所示。迭代對象。解密其鍵和屬性並添加新的

[ {A: 84 , B: 17 , C: 11 } ] 

我需要構建一些看起來像這樣的東西。

[ { name : "A" , value : 84 , color : "black" }, 
    { name : "B" , value: 17 , color: "blue" } , 
    { name : "C", value: 11 , color: "amber" } ] 

所以我需要一個新的結構,添加屬性(這種情況下的顏色),這將取決於初始鍵值。 「A」,「B」或「C」。

我不要求一個完整的答案(如果你不想讓一個人隨意做),我只想知道這種操作需要哪個函數。

+0

你能解釋一下你正在嘗試做的更好一點?你想模擬一個結構嗎?或者你是否試圖將JS對象解析爲JSON,並根據「name」屬性自動獲取顏色? – LoreV

+0

你從哪裏得到顏色屬性? –

+0

@LoreV我已經構建了一個RESTful API。它以第一個例子的格式返回數據。我使用expressjs和handlebars模板。我需要一些額外的屬性在我的數據,所以我可以添加類/圖標到我的HTML。例如,如果我在一個名稱爲對象的對象:「A」生病添加類「紅色」我的模板股利。 – Paran0a

回答

4

使用Object.keysArray.map功能和輔助 「彩色圖」 對象中的溶液:

var arr = [ {A: 84 , B: 17 , C: 11 }], 
    colorMap = {A:"black", B:"blue", C:"amber"}, // can be extended with any other relations 
    current = arr[0]; 

var result = Object.keys(current).map(function(k) { 
    return {'name': k, 'value': current[k], 'color': colorMap[k]}; 
}); 

console.log(JSON.stringify(result, 0, 4)); 

console.log輸出:

[ 
    { 
     "name": "A", 
     "value": 84, 
     "color": "black" 
    }, 
    { 
     "name": "B", 
     "value": 17, 
     "color": "blue" 
    }, 
    { 
     "name": "C", 
     "value": 11, 
     "color": "amber" 
    } 
] 
2

可以使用的for..in循環您的鑰匙,然後映射一個新的對象:

var current = [ {A: 84 , B: 17 , C: 11 } ]; 
var result = []; 
for(var key in current[0]){ 
    var name = key; 
    var value = current[0][key]; 
    var color = ""; 
    switch(key){ 
     case "A": 
      color = "black"; 
      break; 
     case "B": 
      color = "blue"; 
      break; 
     case "C": 
      color = "amber"; 
      break; 
    }; 
    result.push({name : name, value : value, color: color}); 
} 
2

你不需要任何破壞,一個簡單的循環就足以創造新結構:

var result = []; 
for (var prop in input[0]) 
    result.push({ 
     name: prop, 
     value: input[0][prop], 
     color: colorForName(prop) 
    });