2017-09-23 52 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);