繁体   English   中英

在 javascript 中合并具有相同索引的 json 列表

[英]Merge json list having same index in javascript

我有以下 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]

我想在谷歌折线图上显示这些数据。

你可以这样做:

 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);

这是如何工作的:它首先创建一个包含所有年份的数组(三个对象的所有键),从该数组中过滤掉所有重复项,然后 map 它从三个对象中添加这些年份的值(那些属性) .

 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM