2017-05-24 7 views
0

内のデータを変換:ピボットと、たとえば私が変換したいのですが、私はJavaScriptで<em>クライアント側</em>データ変換をしたいJS

[ 
    {env:'test', name:'something'}, 
    {env:'test', name:'else'}, 
    {env:'prod', name:'entirely'}, 
] 

へ:

{ 
    envs: [ 
    { name:'test', 'things': [ {name: 'something'}, {'name': 'else'} ] }, 
    { name:'prod', 'things': [ {name: 'entirely'} ] } 
    ] 
} 

は何ですかこれを行う最善の方法は?図書館かブルートフォース?

in_data = [...] 
d = defaultdict(list) 
for t in in_data: 
    d[t['env']] += [t] 
out_data = { 'envs': [{'name':k, 'things':v} for k,v in d.items()] } 

私は同じことを達成するためにJS mapまたは矢印機能を使用するか、おそらくいくつかのライブラリを使用してもらえ:Pythonでは、私のようなものは、リストの内包表記を使用したいですか?標準のChromeで動作していると良いでしょう(手動でES2015などを有効にする必要はありません)。

答えて

1

あなたはこのような何かをすることによってそれを達成することができます

var data = [ 
 
    {env:'test', name:'something'}, 
 
    {env:'test', name:'else'}, 
 
    {env:'prod', name:'entirely'}, 
 
]; 
 

 

 
var groups = data.reduce(function(acc, obj) { 
 
    acc[obj.env] = acc[obj.env] || []; 
 
    acc[obj.env].push(obj); 
 
    return acc; 
 
}, {}); 
 

 
var result = { 
 
    envs: Object.keys(groups).map(function(key) { 
 
    return { 
 
     name: key, 
 
     things: groups[key].map(function(obj) { 
 
     return { 
 
      name: obj.name 
 
     } 
 
     }) 
 
    } 
 
    }) 
 
}; 
 

 
console.log(result);

1

あなたは

function organizeObject(b){ 
    var a = _.map(_.groupBy(b, "env"), function(v, i){ 
     return {name: i, "things": _.map(v, function(i){return {name: i.name} })} 
    }); 
    return {envs : a} 
} 
libにアンダースコアを使用することができます
関連する問題