2013-10-01 43 views
4

尝试合并json数组的重复键并以csv格式构建相应的值。通过重复键合并数组的值

A=[{a:1,b:2},{a:1,b:1},{a:1,b:6},{a:2,b:5},{a:2,b:3}] 

试图在

A=[{a:'1',b:'2,1,6'},{a:2,b:'5,3'}] 

代码,我试图

var existingIDs = []; 
     A= $.grep(A, function (v) { 
      if ($.inArray(v.a, existingIDs) !== -1) { 
       return v.b+= ','; 
      } 
      else { 
       existingIDs.push(v.a); 
       return true; 
      } 
     }); 

输出转换就像

A=[{a:1,b:2},{a:1,b:'1,'},{a:1,b:'6,'},{a:2,b:5},{a:2,b:'3,'}] 
+0

请小心评论....下来选民 – joshua

回答

2

回报与1创建一个临时对象,从等作为键和不断增加的b值,然后遍历该对象创建新的数组:

var A = [{a:1,b:2},{a:1,b:1},{a:1,b:6},{a:2,b:5},{a:2,b:3}]; 
var temp = {}; 

for (var i=0; i<A.length; i++) { 
    temp[A[i].a] = 
     temp[A[i].a] === undefined ? 
      A[i].b : 
      temp[A[i].a] + ',' + A[i].b; 
} 

A = []; 

for (var key in temp) { 
    A.push({a: key, b:temp[key]}) 
} 

FIDDLE

+0

我们爱oneliners。 – joshua