Javascript 对象数组的变换结构

Javascript 对象数组的变换结构,javascript,ecmascript-6,Javascript,Ecmascript 6,我有如下数据: var data = [{"DefaultZone":[{"key":"stream0","value":100}, {"key":"stream1","value":50}, {"key":"stream2","value":10} ]}, {"Zone 1":[{"key":"stream0","value":120},

我有如下数据:

var data = [{"DefaultZone":[{"key":"stream0","value":100},
                        {"key":"stream1","value":50},
                        {"key":"stream2","value":10}
                       ]},
        {"Zone 1":[{"key":"stream0","value":120},
                  {"key":"stream1","value":55},
                  {"key":"stream2","value":15}
                  ]}
       ]        
想把它变成-

var data = [{"key": "stream0", "values":[{"x":"DefaultZone","y":100}, {"x":"Zone 1","y":120}]},
    {"key": "stream1", "values":[{"x":"DefaultZone","y":50}, {"x":"Zone 1","y":55}]},
    {"key": "stream2", "values":[{"x":"DefaultZone","y":10}, {"x":"Zone 1","y":15}]}
   ];

使用JavaScriptES6。任何帮助都将不胜感激。

首先想到的是:

风险值数据=[{ 默认区域:[ {key:stream0,value:100}, {key:stream1,value:50}, {key:stream2,value:10}] }, { 1区:[ {key:stream0,value:120}, {key:stream1,value:55}, {key:stream2,value:15}] }]; let working=data.reducep,c=>{ 设x=Object.keysc[0]; c[x].forEachv=>{ 如果!p[v.key]p[v.key]=[]; p[v.key].push{x:x,y:v.value}; }; 返回p; }, {}; 让output=Object.keysworking.mapv=>{key:v,values:working[v]};
console.logoutput 我想到的第一个方法是:

风险值数据=[{ 默认区域:[ {key:stream0,value:100}, {key:stream1,value:50}, {key:stream2,value:10}] }, { 1区:[ {key:stream0,value:120}, {key:stream1,value:55}, {key:stream2,value:15}] }]; let working=data.reducep,c=>{ 设x=Object.keysc[0]; c[x].forEachv=>{ 如果!p[v.key]p[v.key]=[]; p[v.key].push{x:x,y:v.value}; }; 返回p; }, {}; 让output=Object.keysworking.mapv=>{key:v,values:working[v]}; console.logoutput 虽然我喜欢这个答案,但这里有另一个,仅使用

风险值数据=[{ 默认区域:[{ 关键字:stream0, 数值:100 }, { 关键词:stream1, 价值:50 }, { 关键词:stream2, 数值:10 }] }, { 1区:[{ 关键字:stream0, 数值:120 }, { 关键词:stream1, 价值:55 }, { 关键词:stream2, 价值:15 }] }] 最终={} data.forEachfunctionx{ Object.keysx.ForEachFunction{ x[y]。forEachfunctionz{ 如果!final[z['key']]final[z['key']]=[]; 最终[z['键]].按{ “x”:y, “y”:z[“值”] } } } } 答案=[] Object.keysfinal.forEachfunctionx{ 回答,推{ “键”:x, 值:最终值[x] } } console.loganswer虽然我喜欢这个答案,但这里有另一个,只使用

风险值数据=[{ 默认区域:[{ 关键字:stream0, 数值:100 }, { 关键词:stream1, 价值:50 }, { 关键词:stream2, 数值:10 }] }, { 1区:[{ 关键字:stream0, 数值:120 }, { 关键词:stream1, 价值:55 }, { 关键词:stream2, 价值:15 }] }] 最终={} data.forEachfunctionx{ Object.keysx.ForEachFunction{ x[y]。forEachfunctionz{ 如果!final[z['key']]final[z['key']]=[]; 最终[z['键]].按{ “x”:y, “y”:z[“值”] } } } } 答案=[] Object.keysfinal.forEachfunctionx{ 回答,推{ “键”:x, 值:最终值[x] } }
loganswer不是JSON JSON是字符串格式。我已经编辑了您的问题以删除对JSON的引用,但是您可能希望自己修复所需输出中的语法问题缺少引号,缺少逗号。您显示的是JavaScript对象文本,而不是。你所展示的是你所拥有的,还是你有真正的JSON?你已经尝试了什么?那不是JSON JSON是一种字符串格式。我已经编辑了您的问题以删除对JSON的引用,但是您可能希望自己修复所需输出中的语法问题缺少引号,缺少逗号。您显示的是JavaScript对象文本,而不是。您所展示的是您实际拥有的,还是您拥有实际的JSON?您已经尝试了什么?