2014-03-04 81 views
0

帮助新手解决以下问题。 我有一个对象:JavaScript排序数组中的对象

var arr = [ 
    [{a:1},{a:2}], 
    [{b:1},{b:2}] 
    ]; 

如何将其转换为这样的:

var arr1 = [ 
    [{a:1},{b:1}], 
    [{a:2},{b:2}], 
    ]; 

非常感谢大家对你的答案! 我试图将服务器的json响应拆分为单个对象。 我这里有一个JSON: 变种SRC = {

img: [ 
      { 
       alt: "", 
       src: "http://1.jpg", 
       width: "125" 
      }, 
      { 
       alt: "", 
       src: "http://2.jpg", 
       width: "125" 
      } 

     ], 
    a: [ 
      { 
       href: "http://1.html", 
       content: "title1" 
      }, 
      { 
       href: "http://2.html", 
       content: "title2" 
      } 
     ], 
    dd: [ 
      { 
       p: "content1" 
     }, 
     { 
       p: "content2" 
     } 

     ] 
} 

我想json的单个对象转换:

var src1 = [ 
     { 
      alt: "", 
      src: "http://1.jpg", 
      width: "125", 
      href: "http://1.html", 
      content: "title1", 
      p: "content1" 
     }, 
{ 
      alt: "", 
      src: "http://2.jpg", 
      width: "125", 
      href: "http://2.html", 
      content: "title2", 
      p: "content2" 
     }, 
    ] 
+4

请澄清或给出更多细节或更详细的例子,你想要做什么。 –

+0

@ Khnle-KevinLe我认为他完全清楚自己在做什么。 – thefourtheye

+0

我用更新的JSON更新了我的答案。看一看,让我知道它是否有效。 – AbhinavRanjan

回答

0

你需要做这样的事情。其余的你需要根据你的真实数据来弄清楚。

var arr1 = []; 
var firstTime = 1; 
for(var i = 0; i < arr.length; i++) { 
    if(firstTime == 1){ 
     for(var j=0; j < arr[0].length; j++){ 

      arr1.push(new Array()); 
     } 
     firstTime = 0; 
    } 
    for(var j=0; j < arr[0].length; j++){ 

     arr1[j].push(arr[i][j]); 
    } 
} 

问题更新后。 你可以使用下面的方法来获得你想要的。

var src2 = new Array(); 
function convert(object){ 
    var firstTime = 1; 
    for(var key in object){ 
     var property = object[key]; 
     if(firstTime == 1){ 
      for(var i = 0; i < property.length; i++){ 
       src2.push(new Object()); 
      } 
      firstTime = 0; 
     } 
     for(var i = 0; i < property.length; i++){ 
      for(var key1 in property[i]){ 
       src2[i][key1] = property[i][key1]; 
      } 
     } 
    } 
} 

用法:convert(src1);

+0

非常感谢! – libtool

0

这是我得到了。

基本上我把复杂的数组分成单个数组。做一个比较,然后重建数组到初始数组的相同尺寸。

JS小提琴:http://jsfiddle.net/49g69/

var arr = [ 
    [{a:1},{a:2}], 
    [{b:1},{b:2}] 
]; 

var newArr = [] 

//Step 1: Get all the data into one array 
for(var i = 0; i<arr.length; i++) { 
    for(var j = 0; j<arr[i].length; j++) { 
     newArr.push(arr[i][j]); 
    } 
} 

//Step 2: Sort that data 
newArr.sort(function(a, b) { 
    var aVal = a.a || a.b 
     , bVal = b.a || b.b; 
    return aVal - bVal; 
}); 

var finalArray = [] 
    , tempArray = []; 

//Step 3: Get the Array size of the initial Array 
var arrayCount = arr[0] ? arr[0].length : 0; 

//Step 4: Loop through the sorted Array 
for(var i = 0; i<newArr.length; i++) { 

    //Step 5 Determine if it meets the size reqs, then push the subarray 
    if((i+1) % arrayCount === 0) { 
     tempArray.push(newArr[i]); 
     finalArray.push(tempArray); 
     tempArray = []; 
    } else { 
     tempArray.push(newArr[i]); 
    } 

} 

console.log(finalArray); 
0

这将是更容易帮助,如果你给你的任务,更多的细节。你是否试图按键(升序)对内部对进行分组?或值(相等)?任何其他/额外的标准?