将对象数组重新排序为嵌套对象

时间:2013-04-15 05:04:38

标签: javascript arrays object

如何重新排列对象数组

[ {"2007": rank, "2008": rank, "Class": "label 1"}, 
  {"2007": rank, "2008": rank, "Class": "label 2"}, ... ]

进入嵌套对象,例如:

 {"2007": 
      {"label 1": rank, "label 2": rank}, 
 "2008": 
      {"label 1": rank, "label 2": rank}, ...}

1 个答案:

答案 0 :(得分:0)

您的要求似乎是按Class转换表和索引:

  • 调用输入“table”
  • 调用数组的每个元素“row”
  • 表示每个year至少是一行中的键,但键Class除外
    • 使year成为output中的一个键,映射到该对象:
      • output[year]中的每个键都是某行中class的值Class,映射到该值:
        • output[year][class] = input.find("Class",class)[year]

这是一种可能的实施方式:

 var input = [ {"2007": rank, "2008": rank, "Class": "label 1"}, 
               {"2007": rank, "2008": rank, "Class": "label 2"} ]
 //////////
 var yr, i;
 var output = {};
 for(i=0; i<input.length; i++){
   var row = input[i];
   for(yr in row){
     output[yr] = output[yr] || {};
     output[yr][row.Class] = row[yr];
   }
 }
 //////////////
 return output;

测试:http://jsfiddle.net/aT5YG/1

如果多行具有相同的Class,则后面的行会覆盖前一行。如果输入是锯齿状的,则输出将是锯齿状的。