我有以下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.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]
我想在Google折线图中显示此数据。
答案 0 :(得分:1)
您可以执行以下操作:
const data = {
"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,
}
}
const keys = ['nationalAvg', 'stateAvg', 'zipCodeAvg'];
const years = keys
.reduce((a, k) => [...a, ...Object.keys(data[k])], [])
.filter((v, i, arr) => arr.indexOf(v) === i)
.sort();
const result = years.map((year) =>
[year, ...keys.reduce((a, k) => [...a, data[k][year]], [])]
);
console.log(result);
这是如何工作的:它首先创建一个所有年份的数组(三个对象的所有键),从该数组中过滤出所有重复项,然后将其映射为从中添加这些年份的值(这些属性)这三个对象。
答案 1 :(得分:1)
const list = {
"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,
}
}
let keys = ['nationalAvg', 'stateAvg', 'zipCodeAvg'];
let obj =keys.reduce((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]);
});
return acc;
}, {});
// Format 1
console.log(obj);
const result = Object.entries(obj).map(o=> [ o[0], ...o[1]]);
//Format 2
console.log(result)