2017-09-23 12 views
1

: 데이터 구조로나는이 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] 
     } 
    ] 
] 

내가 그렇게 자바 스크립트/노드를 사용하고 있지만, 나는 그것을 작동시킬 수 없다. 누구든지 그렇게 할 수있는 루프를 작성하도록 도와 줄 수 있습니까?

편집 : 내가 뭘하려, 다음,하지만 난 그것이 내가

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);

관련 문제