从另一个JSON对象创建JSON对象

时间:2013-12-12 15:52:53

标签: javascript jquery arrays json

我不知道标题是否适合我想要做的事情。

我有以下对象数组

    array([0]: {category: "10",
                question: "101"},
          [1]: {category: "10",
                question: "102"},
          [2]: {category: "20",
                question: "201"}
    );

我希望将所有元素分组为:

    array([0]: {category: "10", {question: "101",
                                 question: "102"}},
                category: "20", {question: "201"}});

我不知道这是否可行,或者是否有另一种更好的方法可以解决这个问题(可能是二维数组?)但是我们非常感谢任何帮助。

谢谢!

很抱歉缺少信息,以下是我创建对象数组的方法:

    var arr_sections = [];
    var arr_questions = [];
var jsonObj = [];
$('.ui-sortable-nostyle').each(function(){
    arr_sections.push($(this).attr("sec_id"));              
});

// create json object with pairs category - question 
$(".sortable2").each(function(i){                           
    $(this).children().each(function(j){    
        var cat = arr_sections[i];
        jsonObj.push({
            category: arr_sections[i],
            question: $(this).attr("ques_id")
        });     
    });
});  

获得了一系列具有以下结构的对象:

    [Object, Object, Object, Object, Object]
    0: Object
       category: "1052"
       question: "3701"
       __proto__: Object 
    1: Object
       category: "1053"
       question: "3702"
       __proto__: Object
    2: Object
       category: "483"
       question: "1550"
       __proto__: Object
    3: Object
       category: "483"
       question: "1548"
       __proto__: Object
    4: Object
       category: "483"
       question: "1549"
       __proto__: Object
    length: 5

试图创建我的新阵列:

    for(var i = 0; i < jsonObj.length; i++){
        temp[jsonObj[i].category] = jsonObj[i].question;
}

但我没有得到所有价值观:

    [483: "1549", 1052: "3701", 1053: "3702"] 

2 个答案:

答案 0 :(得分:3)

你有:

var arr = [ 
  {category: "10", question: "101"},
  {category: "10", question: "102"},  
  {category: "20", question: "201"}
];

你想(我想):

var arrRequired = [
  {category: "10", question : ["101", "102"] },
  {category: "20", question : ["201"] }
];

我会给你:

var obj = {
  "10" : ["101", "102"],
  "20" : ["201"]
};

要将您拥有的内容转换为我将给您的内容,您可以执行以下操作:

var result = {};
arr.forEach(function(item) {
  if (!result[item.category]) 
    result[item.category] = [item.question];
  else
    result[item.category].push(item.question);
});

为了达到你想要的东西,你可以做到:

var arrRequired = [];
for (var category in result){
  arrRequired.push({ 'category' : category, 'question' : result[category] });
}

如果那不是你想要的,那么也许你应该使用有效的语法更好地解释它。

答案 1 :(得分:-2)

以下是您提出的问题的答案:

var object1 = JSON.parse(jsonString1);
// Do something to object1 here.
var jsonString2 = JSON.stringify(object1);