2016-08-12 14 views
-2

オブジェクトのjson配列を作成しようとしています。オブジェクトのjson配列の書式設定

私の配列は、配列が形式であるように、私は出力にそれをしたい

var array=[{a:1,b:2,id:apple},{a:5,b:10,id:banana}] 

です:

[{source:apple, target:a ,value:1},{source:apple, target:b ,value:2},{source:banana, target:a ,value:5},{source:banana, target:b ,value:10}] 

ヘルプは感謝しました!

+1

あなたが何をしようとしたのですか? – baao

答えて

0

を使用し簡単です。

var array=[{a:1,b:2,id:'apple'},{a:5,b:10,id:'banana'}]; 
 

 
var result = array.reduce(function(r, e) { 
 
    Object.keys(e).forEach(function(k) { 
 
    if(k != 'id') r.push({source: e.id, target:k ,value:e[k]}) 
 
    }) 
 
    return r; 
 
}, []); 
 

 
console.log(result)

+0

ありがとうございます..あなたの答えは正しいです。しかし、私は1つのオブジェクトに500のキー値のペアを持っている場合は動作しません。 –

+0

プロパティの数に関係なく動作するはずですhttps://jsfiddle.net/Lg0wyt9u/1116/ –

+0

私はフィドルを更新しましたhttps://jsfiddle.net/Lg0wyt9u/1118/ –

0

それはちょうどあなたがこの結果を得るためにreduce()Object.keys()を使用することができますJSON.stringify(array)

0

ネイティブ(未テスト)ソリューションは、次のようになります。

function myFormat(objects){ 
 
    var formated = []; 
 
    for(var i = 0; i < objects.length; i++){ 
 
    if(!objects[i].hasOwnProperty('id'))continue; 
 

 
    var fObj = []; 
 
    for(var key in objects[i]){ 
 
     if(key == 'id')continue; 
 

 
     formated.push({ 
 
     source: objects[i].id, 
 
     target: key, 
 
     value: objects[i][key] 
 
     }); 
 
    } 
 
    } 
 
    return formated; 
 
} 
 

 
var array=[{a:1,b:2,id:'apple'},{a:5,b:10,id:'banana'}]; 
 
console.log(myFormat(array));

関連する問題