2016-08-12 70 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

您可以使用reduce()Object.keys()得到這個結果。

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

謝謝..你的回答是正確的。但是,如果我在一個對象中有500個鍵值對,則不起作用。 –

+0

它應該工作,無論屬性數量https://jsfiddle.net/Lg0wyt9u/1116/ –

+0

我更新了小提琴https://jsfiddle.net/Lg0wyt9u/1118/ –

0

很簡單隻需要使用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));