使用javascript更改JSON结构

时间:2015-05-20 08:11:50

标签: javascript arrays json oop

这是我的代码..

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完成这项工作?

3 个答案:

答案 0 :(得分:4)

首先,你想要的是一个对象,而不是一个数组。所以你不能使用只将一个数组映射到另一个数组的.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传递。< / p>

答案 1 :(得分: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;
}, {});

答案 2 :(得分:2)

您也可以尝试:

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);