Слияние результатов из json массивов по дате - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь объединить результаты из данного JSON в jQuery. В настоящее время я пытаюсь использовать фрагменты здесь: Слияние Json дата массива на основе , но мне не повезло в достижении нужного мне конечного результата.

Текущие результаты:

[
  {
    "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"
  },
]

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 04 апреля 2020

Я сделал с функцией уменьшения

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...