2017-09-23 50 views
1

我想这个JSON转换:使用JSON数据结构的重新组织挣扎

[ 
    [ 
     { 
      "id": 1, 
      "ac": 1 
     }, 
     { 
      "id": 2, 
      "ac": 1 
     }, 
     { 
      "id": 3, 
      "ac": 1 
     } 
    ], 
    [ 
     { 
      "id": 1, 
      "ac": 1 
     }, 
     { 
      "id": 2, 
      "ac": 1 
     }, 
     { 
      "id": 3, 
      "ac": 0 
     } 
    ], 
    [ 
     { 
      "id": 1, 
      "ac": 1 
     }, 
     { 
      "id": 2, 
      "ac": 1 
     }, 
     { 
      "id": 3, 
      "ac": 0 
     } 
    ], 
    [ 
     { 
      "id": 1, 
      "ac": 1 
     }, 
     { 
      "id": 2, 
      "ac": 0 
     }, 
     { 
      "id": 3, 
      "ac": 0 
     } 
    ], 
    [ 
     { 
      "id": 1, 
      "ac": 1 
     }, 
     { 
      "id": 2, 
      "ac": 0 
     }, 
     { 
      "id": 3, 
      "ac": 0 
     } 
    ], 
    [ 
     { 
      "id": 1, 
      "ac": 1 
     }, 
     { 
      "id": 2, 
      "ac": 0 
     }, 
     { 
      "id": 3, 
      "ac": 0 
     } 
    ] 
] 

成数据结构:

[ 
    [ 
     { 
      "id": 1, 
      "ac": [1,1,1,1,1,1] 
     } 
    ], 
    [ 
     { 
      "id": 2, 
      "ac": [1,1,1,0,0,0] 
     } 
    ], 
    [ 
     { 
      "id": 3, 
      "ac": [1,0,0,0,0,0] 
     } 
    ] 
] 

我使用的JavaScript /节点这样做,但我无法让它工作。任何人都可以帮我写一个可以这样做的循环吗?

编辑: 我试过,以下,但我想这不会有很大的帮助,因为它仍然没有输出,我需要

var acc_array = []; 
var a_id; 
for(var y=0; y<data.length; y++) { //151 
    if(y<data.length-1){ 
     a_id = data[y].a_id; 
     if(a_id == data[y].a_id) { 
      acc_array[y] = new Array(); 
      acc_array[y].push(data[y].acc); 
     } 
    } 
    if(y==data.length-1){ 
     acc_array[y] = new Array(); 
     a_id = data[y].a_id; 
     if(a_id == data[y].a_id) { 
      acc_array[y].push(data[y].acc); 
     } 
     jsonfile.writeFile("a.json", acc_array, function (err) { 
      console.log(err); 
     }); 
    } 
} 
+3

你已经试过了什么? – BenM

+0

是否按照id 1,2,3的顺序排列? –

+0

,因为它是一个JS数组,订单永远不能保证没有? –

回答

0

你可以采取一个嵌套循环和用于收集与id相同的项目的散列表。

var data = [[{ id: 1, ac: 1 }, { id: 2, ac: 1 }, { id: 3, ac: 1 }], [{ id: 1, ac: 1 }, { id: 2, ac: 1 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 1 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 0 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 0 }, { id: 3, ac: 0 }], [{ id: 1, ac: 1 }, { id: 2, ac: 0 }, { id: 3, ac: 0 }]], 
 
    hash = Object.create(null), 
 
    result = []; 
 

 
data.forEach(function (a) { 
 
    a.forEach(function (o) { 
 
     hash[o.id] || result.push(hash[o.id] = { id: o.id, ac: [] }); 
 
     hash[o.id].ac.push(o.ac); 
 
    }); 
 
}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

阵列#CONCAT一切到一个数组,然后使用一个阵列#减少辅助对象,以获得您想要的对象的数组:

var data = [[{"id":1,"ac":1},{"id":2,"ac":1},{"id":3,"ac":1}],[{"id":1,"ac":1},{"id":2,"ac":1},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":1},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":0},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":0},{"id":3,"ac":0}],[{"id":1,"ac":1},{"id":2,"ac":0},{"id":3,"ac":0}]]; 
 

 
var hash = Object.create(null); 
 
var result = [].concat(...data) 
 
    .reduce(function(r, o) { 
 
    var item = hash[o.id]; 
 
    
 
    if(!item) { 
 
     item = hash[o.id] = { id: o.id, ac: [] };  
 
     r.push(item); 
 
    } 
 
    
 
    item.ac.push(o.ac); 
 
    
 
    return r; 
 
    }, []); 
 
    
 
console.log(result);