2017-09-23 14 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] 
     } 
    ] 
] 

私はそうするために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);

関連する問題