将对象转换为单独模型的最佳方法是什么?

时间:2013-08-02 12:48:02

标签: jquery loops backbone.js foreach each

我有一个json数据,需要转换为单独的键值对才能添加到数组中。

将json数据转换为单独的密钥对数据的正确方法是什么??

我正在寻找最好的做法。

这是我的json:

{
   "DashBoard":[

    {"title":"DashBoard"},
    {"widget":[{"slide":"To do"},{"slide":"Teamspace"},{"slide":"Recent Activity"}]},
    {"activity":[
        {"option":[{"show":"Volvo"},{"show":"Benz"},{"show":"Honda"}]},
        {"rows":[
            {"row" :  {"title":"Advert1", "text":"sample text1", "date":"22-06-2013"} }
            ,{"row" : {"title":"Advert2", "text":"sample text2", "date":"22-06-2014"} }
            ,{"row" : {"title":"Advert3", "text":"sample text3", "date":"22-06-2015"} }
            ,{"row" : {"title":"Advert4", "text":"sample text4", "date":"22-06-2016"} }
            ,{"row" : {"title":"Advert5", "text":"sample text5", "date":"22-06-2017"} } 
        ]}
    ]}

   ]
}

我的输出应该是:

var arr = [

{"title":"DashBoard"},
{"slide":"To do"},
{"slide":"Teamspace"},
{"slide":"Recent Activity"},
{"show":"Volvo"},
{"show":"Benz"},
{"show":"Honda"}
{"row" :  {"title":"Advert1", "text":"sample text1", "date":"22-06-2013"},
{"row" : {"title":"Advert2", "text":"sample text2", "date":"22-06-2014"}
]
像这样。

我尝试:

newObj = {
                            "title"     : obj[0], 
                            "widget"    : obj[1]["widget"], 
                            "option"    : obj[2].activity[0]["option"], 
                            "rows"      : obj[2].activity[1]["rows"]
                        };


newObj = {
            "title"     : obj[0], 
            "widget"    : obj[1]["widget"], 
            "option"    : obj[2].activity[0]["option"], 
            "rows"      : obj[2].activity[1]["rows"]
        };



    $.each(newObj, function(key, value){

        if($.type(value) === "object"){
            newColl.push(value);
        }else if ($.type(value) === "array"){

            _.each(value, function(i,v){
                newColl.push(i);
            })

        }



    })

但是没有结果最好。任何人帮助我更正确的方法得到这个? (基本上我将这全部转换为骨干模型)

1 个答案:

答案 0 :(得分:3)

接受挑战!今天我心情很好,所以你走了:

function getArray(input) {
    var result = [];
    for (var i in input) {
        var val = input[i];
        if (Object.prototype.toString.call(val) === '[object Array]') {
            for(var j = 0; j < val.length; j++){
                result = result.concat(getArray(val[j]));
            }
        } else {
            var item = {};
            item[i] = val;
            result.push(item);
        }
    }
    return result;
}

var output = getArray(input);

Here is a working example

这假定input是您的原始对象(不是JSON字符串)。如果你有一个JSON字符串,首先解析它:

var input = JSON.parse(jsonString);