转换对象js显示

时间:2014-07-09 04:05:41

标签: javascript jquery json

例如我有对象js

data = {"dt1_a": 20, "dt1_b": 30, "dt2_a": 40, "dt2_b": 50}

我想将数据转换为

data1 = {"dt1": {"a": 20, "b": 30}, "dt2": {"a": 40, "b": 50}}

请提出具体的解决方案。

3 个答案:

答案 0 :(得分:5)

尝试类似

的内容
var data1 = {};
$.each(data, function (key, value) {
    var parts = key.split('_'),
        p1 = parts[0];
    if (!data1[p1]) {
        data1[p1] = {};
    }
    data1[p1][parts[1]] = value;
})
console.log(data1)

演示:Fiddle

答案 1 :(得分:5)

抓取对象键并循环遍历它们,然后将正确的属性应用于新对象。

data = {"dt1_a": 20, "dt1_b": 30, "dt2_a": 40, "dt2_b": 50};
var data1 = {};
Object.keys(data).forEach(function(key){
   var keySplit = key.split("_");
   //create dt1, dt2 properties if they do not exist yet
   data1[keySplit[0]] = data1[keySplit[0]] || {};
   data1[keySplit[0]][keySplit[1]] = data[key]
});

请注意,如果浏览器没有polyfill can be used

,则依赖于支持forEach的浏览器

您也可以在评论中使用for..in作为Joseph Marikle提及,这也更兼容

for(key in data){
   var keySplit = key.split("_");
   //create dt1, dt2 properties if they do not exist yet
   data1[keySplit[0]] = data1[keySplit[0]] || {};
   data1[keySplit[0]][keySplit[1]] = data[key]
}

答案 2 :(得分:1)

那么@Arun P Johny& @Patrick Evans已涵盖最佳方式。我想再分享一个答案,就像用简单的术语重写上述两个答案一样。

var final = {};
$.each(data, function (index, value) {

    var arr = index.split('_'),
        name = arr[0],
        val = arr[1];

    if (final[name]) {
        final[name][val] = value;
    } else {
        final[name] = {};
        final[name][val] = value;
    }

});
console.log(final);

Live Demo