在javascript中合并具有相同索引的json列表
我有以下json数据:在javascript中合并具有相同索引的json列表,javascript,json,Javascript,Json,我有以下json数据: { "leadId": 0, "nationalAvg": { "2007": 822.0, "2008": 830.0, "2009": 880.0, "2010": 909.0, "2011": 979.0, }, "stateAvg": { "2007": 1023.0, "2008": 1026.
{
"leadId": 0,
"nationalAvg": {
"2007": 822.0,
"2008": 830.0,
"2009": 880.0,
"2010": 909.0,
"2011": 979.0,
},
"stateAvg": {
"2007": 1023.0,
"2008": 1026.0,
"2009": 1035.0,
"2010": 1050.0,
"2011": 1072.0,
"2012": 1150.0,
},
"zipCodeAvg": {
"2007": 1050.98,
"2008": 1054.06,
"2009": 1063.29,
"2010": 1078.69,
"2011": 1101.27,
"2012": 1181.49,
"2013": 1297.64,
"2014": 1349.99,
}
}
我想将nationalAvg、stateAvg、zipCodeAvg合并在一起,得到如下结果:
["2007": 822.0, 1023.0, 1050.98]
["2008": 830.0, 1026.0, 1054.06]
["2009": 880.0, 1035.0, 1063.29]
["2010": 909.0, 1050.0, 1078.69]
["2011": null, 1072.0, 1101.27]
["2012": null, 1150.0, 1181.49]
["2013": null, null, 1297.64]
["2014": null, null, 1349.99]
我想在谷歌折线图上显示这些数据 您可以这样做:
const数据={
“leadId”:0,
“国民平均收入”:{
"2007": 822.0,
"2008": 830.0,
"2009": 880.0,
"2010": 909.0,
"2011": 979.0,
},
“stateAvg”:{
"2007": 1023.0,
"2008": 1026.0,
"2009": 1035.0,
"2010": 1050.0,
"2011": 1072.0,
"2012": 1150.0,
},
“zipCodeAvg”:{
"2007": 1050.98,
"2008": 1054.06,
"2009": 1063.29,
"2010": 1078.69,
"2011": 1101.27,
"2012": 1181.49,
"2013": 1297.64,
"2014": 1349.99,
}
}
const key=['nationalAvg'、'stateAvg'、'zipCodeAvg'];
常数年=键
.reduce((a,k)=>[…a,…Object.keys(数据[k]),[]))
.filter((v,i,arr)=>arr.indexOf(v)==i)
.sort();
const result=years.map((year)=>
[year,…keys.reduce((a,k)=>[…a,data[k][year]],[])]
);
控制台日志(结果)代码>
const list={
“leadId”:0,
“国民平均收入”:{
"2007": 822.0,
"2008": 830.0,
"2009": 880.0,
"2010": 909.0,
"2011": 979.0,
},
“stateAvg”:{
"2007": 1023.0,
"2008": 1026.0,
"2009": 1035.0,
"2010": 1050.0,
"2011": 1072.0,
"2012": 1150.0,
},
“zipCodeAvg”:{
"2007": 1050.98,
"2008": 1054.06,
"2009": 1063.29,
"2010": 1078.69,
"2011": 1101.27,
"2012": 1181.49,
"2013": 1297.64,
"2014": 1349.99,
}
}
let keys=['nationalAvg'、'stateAvg'、'zipCodeAvg'];
让obj=键。减少((acc,c,i)=>{
Object.entries(list[c]).map((o)=>{
acc[o[0]=(acc[o[0]| | Array.from({length:keys.length}).fill(null));
acc[o[0]][i]=(o[1]);
});
返回acc;
}, {});
//格式1
控制台日志(obj);
const result=Object.entries(obj.map)(o=>[o[0],…o[1]]);
//格式2
console.log(result)
那么您尝试了什么?输出是否正确?该输出不是有效的JavaScript。。。与a.concat(Object.keys(data[k])相比,您需要像{“2007:[822.01023.01050.98],“2008:[830.01026.01054.06],…}
[…a,…Object.keys(data[k])]这样的东西。
速度更慢,可读性更低,字符更多,更容易在大数据上发生堆栈溢出。
,与[…a,data[k]类似[年份]]
这是一个完美的解决方案