2015-05-20 28 views
2

這是我的代碼..變化JSON結構使用JavaScript

var result = data.map(function(item){ 
    return { 
     category:item.category, 
     key:item.key, 
     value:item.value 
    } 
}); 
console.log(result); 

這就是在控制檯越來越打印出來..

Array[4] 
0: Object 
category: "common" 
key: "Food" 
value: "food" 

1: Object 
category: "welcome" 
key: "title" 
value: "Welcome..." 

2: Object 
category: "welcome" 
key: "app_description" 
value: "In this App " 

3: Object 
category: "welcome" 
key: "select_location" 
value: "Select Location" 

這就是我想要達到

{ 
    common:{ 
     "Food" : "food" 
    }, 
    welcome:{ 
     title : Welcome..., 
     app_description : "In this App", 
     select_location : "Select Location" 

    } 
} 

這是我正在嘗試的代碼,但它不工作..

return { 
    item.category:{ 
     item.key:item.value;      
    } 

任何人都可以幫助我嗎?我不想使用GSON或任何其他第三方的JS ..我如何才能完成使用只有核心JS?

+0

你可以提供的價值'data'你開始操縱它之前?如你的'.map()'函數中引用的那樣? –

+0

你確定,你想使用map()來完成這個任務嗎? –

回答

3

首先,你想要的結果是一個對象,而不是一個數組。所以你不能使用.map(),它只將一個數組映射到另一個數組。

你想要.reduce()

var result = data.reduce(function (result, item) { 
    // Create the object the first time it arrives 
    result[item.category] = result[item.category] || {}; 
    // Add the field 
    result[item.category][item.key]=item.value; 
    // Return the resulting object 
    return result; 
}, {}); 
console.log(result);

.reduce()的減少函數需要兩個參數(還有兩個可選參數)。 累計結果當前項目。返回的值是當前項目在其上處理後的結果。

.reduce()第二個參數(第一個是減函數),是初始值,此值將獲得通過作爲result對於第一次迭代。

+0

你指定錯誤的對象,似乎它會像'result [item.category] ​​[item.key] = item.value'還有'result [item.category] ​​= {}'如果它不存在 – Grundy

+1

@Grundy你是正確。我修復並添加了評論。 –

+0

謝謝Madara Uchiha .. :) –

2

Array.prototype.reduce()來救援。

var result = data.reduce(function (previousValue, currentValue) { 
    previousValue[currentValue.category] = previousValue[currentValue.category] || {}; 
    previousValue[currentValue.category][currentValue.key] = currentValue.value; 
    return previousValue; 
}, {}); 
1

你也可以嘗試:

var data = [ 
    { 
     category: "common", 
     key: "Food", 
     value: "food" 
    }, 
    { 
     category: "welcome", 
     key: "title", 
     value: "Welcome..." 
    }, 
    { 
     category: "welcome", 
     key: "app_description", 
     value: "In this App " 
    }, 
    { 
     category: "welcome", 
     key: "select_location", 
     value: "Select Location" 
    } 
]; 
var obj = {}; 
for (var i in data) { 
    if(!obj[data[i].category]){ 
     obj[data[i].category] = {}; 
    } 
    obj[data[i].category][data[i].key] = data[i].value; 
} 
console.log(obj);