首页 > 解决方案 > 按日期合并来自 json 数组的结果

问题描述

我正在尝试在 jQuery 中合并来自给定 JSON 的结果。目前,我一直在尝试使用这里的片段:Merge Json array date based但我没有任何运气来实现我需要的最终结果。

当前结果:

[
  {
    "searches": "37",
    "views": "0",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2019-12-31"
  },
  {
    "searches": "0",
    "views": "6",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2019-12-31"
  },
  {
    "searches": "68",
    "views": "0",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2020-01-01"
  },
  {
    "searches": "0",
    "views": "6",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2020-01-01"
  }
]

要达到的结果:

[
  {
    "searches": "37",
    "views": "6",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2019-12-31"
  },
  {
    "searches": "68",
    "views": "6",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2020-01-01"
  },
]

任何帮助将不胜感激!

标签: jqueryarraysjsonmerge

解决方案


我用reduce函数做的

let merged_arr = arr.reduce((acc, cur, index, arr)=>{

    let new_acc = [];

    if(index === 1){

        new_acc.push(acc);

        if(acc.date === cur.date){

            new_acc.map((o)=>{
                o.searches = +o.searches + +cur.searches;
                o.views = +o.views + +cur.views;
                o.leads = +o.leads + +cur.leads;
                o.fliers = +o.fliers + +cur.fliers;
                o.website = +o.website + +cur.website;
                o.calls = +o.calls + +cur.calls;
                o.shares = +o.shares + +cur.shares;
            });

        } else {
            new_acc.push(cur)
        }

    } else {

        new_acc = acc;

        if( new_acc.some( (o)=>{ return Object.values(o).includes(cur.date) } ) ){

            new_acc.map((o)=>{ 
                if(o.date === cur.date){
                    o.searches = +o.searches + +cur.searches;
                    o.views = +o.views + +cur.views;
                    o.leads = +o.leads + +cur.leads;
                    o.fliers = +o.fliers + +cur.fliers;
                    o.website = +o.website + +cur.website;
                    o.calls = +o.calls + +cur.calls;
                    o.shares = +o.shares + +cur.shares;
                }
            });

        } else {
            new_acc.push(cur);
        }

    }

    return new_acc;

});

结果:

在此处输入图像描述

或者像这样:

let arr = [
  {
    "searches": "37",
    "views": "0",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2019-12-31"
  },
  {
    "searches": "0",
    "views": "6",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2019-12-31"
  },
  {
    "searches": "68",
    "views": "0",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2020-01-01"
  },
  {
    "searches": "0",
    "views": "6",
    "leads": "0",
    "fliers": "0",
    "website": "0",
    "calls": "0",
    "shares": "0",
    "date": "2020-01-01"
  }
];

let merged_arr = arr.reduce((acc, cur, index, arr)=>{

    let new_acc = [];

    if(index === 1){

        new_acc.push(acc);

        if(acc.date === cur.date){

            new_acc.map((o)=>{
                o.searches = (+o.searches + +cur.searches).toString();
                o.views = (+o.views + +cur.views).toString();
                o.leads = (+o.leads + +cur.leads).toString();
                o.fliers = (+o.fliers + +cur.fliers).toString();
                o.website = (+o.website + +cur.website).toString();
                o.calls = (+o.calls + +cur.calls).toString();
                o.shares = (+o.shares + +cur.shares).toString();
            });

        } else {
            new_acc.push(cur)
        }

    } else {

        new_acc = acc;

        if( new_acc.some( (o)=>{ return Object.values(o).includes(cur.date) } ) ){

            new_acc.map((o)=>{ 
                if(o.date === cur.date){
                    o.searches = (+o.searches + +cur.searches).toString();
                    o.views = (+o.views + +cur.views).toString();
                    o.leads = (+o.leads + +cur.leads).toString();
                    o.fliers = (+o.fliers + +cur.fliers).toString();
                    o.website = (+o.website + +cur.website).toString();
                    o.calls = (+o.calls + +cur.calls).toString();
                    o.shares = (+o.shares + +cur.shares).toString();
                }
            });

        } else {
            new_acc.push(cur);
        }

    }

    return new_acc;

});

console.log('merged_arr: ', merged_arr);


推荐阅读