группировать массив объектов с несколькими свойствами и извлекать значения на основе определенных значений - PullRequest
1 голос
/ 22 января 2020

Я хотел сгруппировать по массиву объектов с несколькими полями, и я сделал это, и я хотел объединить письмо сначала в отношении reportName, а затем в отношении конкретных событий, я выполнил эту часть, но когда я Делая это в полях, я получаю это неопределенным с ними, я хочу удалить это неопределенное и распечатать только строки электронной почты.

var data = [ { office: 'abc',
    reportName: 'footprints',
    email: 'abc45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abcd55@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'addfs45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'xyz@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'ggrr@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'ggrr@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'singh45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abcd55@gmail.com',
    event: 'open' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'abc45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'addfs45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'abcdg45@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abc45@gmail.com',
    event: 'open' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'ggrr@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'abc45@gmail.com',
    event: 'open' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'hfhhfg@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'abc45@gmail.com',
    event: 'open' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'ggrr@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abcd55@gmail.com',
    event: 'open' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'abcd55@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abc45@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'xyz@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'abcd55@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abcd55@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'abc45@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'hfhhfg@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'singh45@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'addfs45@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'hfhhfg@gmail.com',
    event: 'processed' },
  { office: 'abc',
    reportName: 'footprints',
    email: 'hfhhfg@gmail.com',
    event: 'delivered' },
  { office: 'abc',
    reportName: 'payroll',
    email: 'addfs45@gmail.com',
    event: 'processed' },
  { office: 'def',
    reportName: 'footprints',
    email: 'jjj@gmail.com',
    event: 'processed' },
  { office: 'def',
    reportName: 'footprints',
    email: 'jjj@gmail.com',
    event: 'delivered' },
  { office: 'def',
    reportName: 'footprints',
    email: 'xyz@gmail.com',
    event: 'processed' },
  { office: 'def',
    reportName: 'payroll',
    email: 'abcdg45@gmail.com',
    event: 'delivered' },
  { office: 'def',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'delivered' },
  { office: 'def',
    reportName: 'payroll',
    email: 'jjj@gmail.com',
    event: 'delivered' },
  { office: 'def',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'processed' },
  { office: 'def',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'delivered' },
  { office: 'def',
    reportName: 'payroll',
    email: 'jjj@gmail.com',
    event: 'open' },
  { office: 'def',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hfghf@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'xyz@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'ghthh@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'abcdg45@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hfgjg@gmail.com',
    event: 'open' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hdgdfhf333@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hdgshgfhg@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hhhhhhrt45@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hdghdghhh@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hfgjg@gmail.com',
    event: 'open' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'jjhhh@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hdhdhcgsfhgf@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'ggrr@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'hfgjg@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hfghf@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'vipin@indinnovation.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'ggrr@gmail.com',
    event: 'open' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdhdhcgsfhgf@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdgshgfhg@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'ghthh@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'xyz@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hfghf@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'ggrr@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hhhhhhrt45@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'ghthh@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hfgjg@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'vipin@indinnovation.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdgdfhf333@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdghdghhh@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'jjhhh@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'jjhhh@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hfgjg@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdgshgfhg@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hhhhhhrt45@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdgdfhf333@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'xyz@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdhdhcgsfhgf@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'hdghdghhh@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'vipin@indinnovation.com',
    event: 'open' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'processed' },
  { office: 'ghi',
    reportName: 'footprints',
    email: 'ggrr@gmail.com',
    event: 'delivered' },
  { office: 'ghi',
    reportName: 'payroll',
    email: 'singh45@gmail.com',
    event: 'delivered' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'anami@thotslab.com',
    event: 'open' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'processed' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'xyz@gmail.com',
    event: 'delivered' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'xyz@gmail.com',
    event: 'processed' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'processed' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'singh45@gmail.com',
    event: 'delivered' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'abcdg45@gmail.com',
    event: 'delivered' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: 'hgdfchgf@gmail.com',
    event: 'processed' },

 ] 

Я пытался решить эту проблему, используя этот способ

const processArray = data.filter(itms => {
      return itms.event == 'processed';
    });
    const openEvent = data.filter(itms => {
      return itms.event == 'open';
    });
    const recieved = data.filter(itms => {
      return itms.event == 'delivered';
    });
    //console.log(processArray)
    const processEmailRecord = processArray.map(arrayofObj => ({
      processEmail: arrayofObj.email,
      office: arrayofObj.office,
      reportName: arrayofObj.reportName,
    }));

    const openEmailRecord = openEvent.map(arrayofObj => ({
      openEmail: arrayofObj.email,
      office: arrayofObj.office,
      reportName: arrayofObj.reportName,
    }));

    const recEmailRecord = recieved.map(arrayofObj => ({
      recEmail: arrayofObj.email,
      office: arrayofObj.office,
      reportName: arrayofObj.reportName,
    }));


const eventwiseArray = [...processEmailRecord, ...recEmailRecord, ...openEmailRecord];


    let hash1 = Object.create(null);
    let eventArray = [];
    eventwiseArray.forEach(o => {
      var key = ['office', 'reportName']
        .map(function(k) {
          return o[k];
        })
        .join('|');

      if (!hash1[key]) {
        hash1[key] = {office: o.office, reportName: o.reportName,email:' ',processEmail:'',recEmail:'',openEmail:''};
        eventArray.push(hash1[key]);
      }
      ['email'].forEach(k => {
        if (hash1[key] && !hash1[key][k].includes(o[k])) {
          hash1[key][k] += o[k] + ',';
        }
      });
     ['processEmail'].forEach(k => {
        if (hash1[key] && !hash1[key][k].includes(o[k])) {
          hash1[key][k] += o[k] + ',';
        }
      });
      ['recEmail'].forEach(k => {
        if (hash1[key] && !hash1[key][k].includes(o[k])) {
          hash1[key][k] += o[k] + ',';
        }
      });
      ['openEmail'].forEach(k => {
        if (hash1[key] && !hash1[key][k].includes(o[k])) {
          hash1[key][k] += o[k] + ',';
        }
      });


    });

Я получаю вывод таким образом

[ { office: 'abc',
    reportName: 'payroll',
    email: ' undefined,xyz@gmail.com,ggrr@gmail.com,singh45@gmail.com,abc45@gmail.com,addfs45@gmail.com,abcdg45@gmail.com,hfhhfg@gmail.com,abcd55@gmail.com,',
    processEmail: 'ggrr@gmail.com,xyz@gmail.com,abcd55@gmail.com,abc45@gmail.com,singh45@gmail.com,hfhhfg@gmail.com,addfs45@gmail.com,undefined,',
    recEmail: 'undefined,xyz@gmail.com,ggrr@gmail.com,singh45@gmail.com,abc45@gmail.com,addfs45@gmail.com,abcdg45@gmail.com,hfhhfg@gmail.com,abcd55@gmail.com,',
    openEmail: 'undefined,abc45@gmail.com,' },
  { office: 'abc',
    reportName: 'footprints',
    email: ' undefined,abc45@gmail.com,abcd55@gmail.com,addfs45@gmail.com,singh45@gmail.com,abcdg45@gmail.com,ggrr@gmail.com,hfhhfg@gmail.com,',
    processEmail: 'ggrr@gmail.com,singh45@gmail.com,abc45@gmail.com,abcd55@gmail.com,hfhhfg@gmail.com,abcdg45@gmail.com,addfs45@gmail.com,undefined,',
    recEmail: 'undefined,abc45@gmail.com,abcd55@gmail.com,addfs45@gmail.com,singh45@gmail.com,abcdg45@gmail.com,ggrr@gmail.com,hfhhfg@gmail.com,',
    openEmail: 'undefined,abcd55@gmail.com,abc45@gmail.com,' },
  { office: 'def',
    reportName: 'footprints',
    email: ' undefined,jjj@gmail.com,xyz@gmail.com,singh45@gmail.com,abcdg45@gmail.com,',
    processEmail: 'jjj@gmail.com,xyz@gmail.com,abcdg45@gmail.com,singh45@gmail.com,undefined,',
    recEmail: 'undefined,jjj@gmail.com,singh45@gmail.com,abcdg45@gmail.com,',
    openEmail: 'undefined,' },
  { office: 'ghi',
    reportName: 'footprints',
    email: ' undefined,singh45@gmail.com,xyz@gmail.com,hfgjg@gmail.com,abcdg45@gmail.com,jjhhh@gmail.com,ggrr@gmail.com,hfghf@gmail.com,vipin@indinnovation.com,hdhdhcgsfhgf@gmail.com,hdgshgfhg@gmail.com,ghthh@gmail.com,hhhhhhrt45@gmail.com,hdgdfhf333@gmail.com,hdghdghhh@gmail.com,',
    processEmail: 'jjhhh@gmail.com,ggrr@gmail.com,hfghf@gmail.com,vipin@indinnovation.com,hdhdhcgsfhgf@gmail.com,hdgshgfhg@gmail.com,xyz@gmail.com,ghthh@gmail.com,singh45@gmail.com,hdgdfhf333@gmail.com,hfgjg@gmail.com,hhhhhhrt45@gmail.com,hdghdghhh@gmail.com,abcdg45@gmail.com,undefined,',
    recEmail: 'undefined,singh45@gmail.com,xyz@gmail.com,abcdg45@gmail.com,ghthh@gmail.com,hfghf@gmail.com,hhhhhhrt45@gmail.com,hfgjg@gmail.com,vipin@indinnovation.com,hdghdghhh@gmail.com,jjhhh@gmail.com,hdgshgfhg@gmail.com,hdgdfhf333@gmail.com,hdhdhcgsfhgf@gmail.com,ggrr@gmail.com,',
    openEmail: 'undefined,hfgjg@gmail.com,vipin@indinnovation.com,' },
  { office: 'hhhfgfg',
    reportName: 'footprints',
    email: ' undefined,anami@thotslab.com,abcdg45@gmail.com,xyz@gmail.com,singh45@gmail.com,hgdfchgf@gmail.com,',
    processEmail: 'abcdg45@gmail.com,xyz@gmail.com,singh45@gmail.com,hgdfchgf@gmail.com,undefined,',
    recEmail: 'undefined,xyz@gmail.com,singh45@gmail.com,abcdg45@gmail.com,',
    openEmail: 'undefined,anami@thotslab.com,' },
  { office: 'def',
    reportName: 'payroll',
    email: ' undefined,abcdg45@gmail.com,jjj@gmail.com,',
    processEmail: 'undefined,',
    recEmail: 'abcdg45@gmail.com,jjj@gmail.com,undefined,',
    openEmail: 'undefined,jjj@gmail.com,' },
  { office: 'ghi',
    reportName: 'payroll',
    email: ' undefined,hfghf@gmail.com,ghthh@gmail.com,abcdg45@gmail.com,hdgdfhf333@gmail.com,hdgshgfhg@gmail.com,hhhhhhrt45@gmail.com,hdghdghhh@gmail.com,hfgjg@gmail.com,hdhdhcgsfhgf@gmail.com,ggrr@gmail.com,jjhhh@gmail.com,xyz@gmail.com,singh45@gmail.com,',
    processEmail: 'undefined,',
    recEmail: 'hfghf@gmail.com,ghthh@gmail.com,abcdg45@gmail.com,hdgdfhf333@gmail.com,hdgshgfhg@gmail.com,hhhhhhrt45@gmail.com,hdghdghhh@gmail.com,hdhdhcgsfhgf@gmail.com,hfgjg@gmail.com,ggrr@gmail.com,jjhhh@gmail.com,xyz@gmail.com,singh45@gmail.com,undefined,',
    openEmail: 'undefined,hfgjg@gmail.com,ggrr@gmail.com,' } ]

, но я хотел получить вывод, не указав неопределенное значение перед ним. Все письма в нем должны быть уникальными, как вывод моего решения.

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вы можете сгруппировать письма и добавить значения в отдельные группы, взяв Set для получения уникальных писем.

var data = [{ office: 'abc', reportName: 'footprints', email: 'abc45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'abcd55@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'addfs45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'singh45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'payroll', email: 'xyz@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'ggrr@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'payroll', email: 'ggrr@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'payroll', email: 'singh45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'abcd55@gmail.com', event: 'open' }, { office: 'abc', reportName: 'payroll', email: 'abc45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'payroll', email: 'addfs45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'payroll', email: 'abcdg45@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'abc45@gmail.com', event: 'open' }, { office: 'abc', reportName: 'payroll', email: 'ggrr@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'payroll', email: 'abc45@gmail.com', event: 'open' }, { office: 'abc', reportName: 'payroll', email: 'hfhhfg@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'payroll', email: 'abc45@gmail.com', event: 'open' }, { office: 'abc', reportName: 'footprints', email: 'ggrr@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'footprints', email: 'abcd55@gmail.com', event: 'open' }, { office: 'abc', reportName: 'footprints', email: 'singh45@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'payroll', email: 'abcd55@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'footprints', email: 'abc45@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'payroll', email: 'xyz@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'payroll', email: 'abcd55@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'footprints', email: 'abcd55@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'payroll', email: 'abc45@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'footprints', email: 'hfhhfg@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'payroll', email: 'singh45@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'footprints', email: 'addfs45@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'payroll', email: 'hfhhfg@gmail.com', event: 'processed' }, { office: 'abc', reportName: 'footprints', email: 'hfhhfg@gmail.com', event: 'delivered' }, { office: 'abc', reportName: 'payroll', email: 'addfs45@gmail.com', event: 'processed' }, { office: 'def', reportName: 'footprints', email: 'jjj@gmail.com', event: 'processed' }, { office: 'def', reportName: 'footprints', email: 'jjj@gmail.com', event: 'delivered' }, { office: 'def', reportName: 'footprints', email: 'xyz@gmail.com', event: 'processed' }, { office: 'def', reportName: 'payroll', email: 'abcdg45@gmail.com', event: 'delivered' }, { office: 'def', reportName: 'footprints', email: 'singh45@gmail.com', event: 'delivered' }, { office: 'def', reportName: 'payroll', email: 'jjj@gmail.com', event: 'delivered' }, { office: 'def', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'processed' }, { office: 'def', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'delivered' }, { office: 'def', reportName: 'payroll', email: 'jjj@gmail.com', event: 'open' }, { office: 'def', reportName: 'footprints', email: 'singh45@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'payroll', email: 'hfghf@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'singh45@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'xyz@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'ghthh@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'abcdg45@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hfgjg@gmail.com', event: 'open' }, { office: 'ghi', reportName: 'payroll', email: 'hdgdfhf333@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'hdgshgfhg@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'hhhhhhrt45@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'hdghdghhh@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'hfgjg@gmail.com', event: 'open' }, { office: 'ghi', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'jjhhh@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'payroll', email: 'hdhdhcgsfhgf@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'ggrr@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'payroll', email: 'hfgjg@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hfghf@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'vipin@indinnovation.com', event: 'processed' }, { office: 'ghi', reportName: 'payroll', email: 'ggrr@gmail.com', event: 'open' }, { office: 'ghi', reportName: 'footprints', email: 'hdhdhcgsfhgf@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'hdgshgfhg@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'ghthh@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'xyz@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'hfghf@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'ggrr@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hhhhhhrt45@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'ghthh@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'hfgjg@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'singh45@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'vipin@indinnovation.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hdgdfhf333@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'hdghdghhh@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'jjhhh@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'jjhhh@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hfgjg@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'hdgshgfhg@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hhhhhhrt45@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'hdgdfhf333@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'xyz@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hdhdhcgsfhgf@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'footprints', email: 'hdghdghhh@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'vipin@indinnovation.com', event: 'open' }, { office: 'ghi', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'processed' }, { office: 'ghi', reportName: 'footprints', email: 'ggrr@gmail.com', event: 'delivered' }, { office: 'ghi', reportName: 'payroll', email: 'singh45@gmail.com', event: 'delivered' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'anami@thotslab.com', event: 'open' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'processed' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'xyz@gmail.com', event: 'delivered' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'xyz@gmail.com', event: 'processed' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'singh45@gmail.com', event: 'processed' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'singh45@gmail.com', event: 'delivered' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'abcdg45@gmail.com', event: 'delivered' }, { office: 'hhhfgfg', reportName: 'footprints', email: 'hgdfchgf@gmail.com', event: 'processed' }],
    result = Object
        .values(data.reduce((r, { office, reportName, event, email }) => {
            var key = [office, reportName].join('|'),
                name = { processed: 'processEmail', delivered: 'recEmail', open: 'openEmail' }[event];

            r[key] = r[key] || { office, reportName, email: new Set };
            r[key].email.add(email);
            if (!r[key][name]) r[key][name] = new Set;
            r[key][name].add(email);
            return r;
        }, {}))
        .map(o => {
            ['email', 'processEmail', 'recEmail', 'openEmail'].forEach(k => {
                if (k in o) o[k] = [...o[k]].join();
            });
            return o;
        });

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 22 января 2020

Я думаю, вы сделали это более сложным, чем должно быть, мой подход будет примерно таким:

var data = [ { office: 'abc',reportName: 'footprints',email: 'abc45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'abcd55@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'addfs45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'singh45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'payroll',email: 'xyz@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'ggrr@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'payroll',email: 'ggrr@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'payroll',email: 'singh45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'abcd55@gmail.com',event: 'open' },{ office: 'abc',reportName: 'payroll',email: 'abc45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'payroll',email: 'addfs45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'payroll',email: 'abcdg45@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'abc45@gmail.com',event: 'open' },{ office: 'abc',reportName: 'payroll',email: 'ggrr@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'payroll',email: 'abc45@gmail.com',event: 'open' },{ office: 'abc',reportName: 'payroll',email: 'hfhhfg@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'payroll',email: 'abc45@gmail.com',event: 'open' },{ office: 'abc',reportName: 'footprints',email: 'ggrr@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'footprints',email: 'abcd55@gmail.com',event: 'open' },{ office: 'abc',reportName: 'footprints',email: 'singh45@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'payroll',email: 'abcd55@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'footprints',email: 'abc45@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'payroll',email: 'xyz@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'payroll',email: 'abcd55@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'footprints',email: 'abcd55@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'payroll',email: 'abc45@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'footprints',email: 'hfhhfg@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'payroll',email: 'singh45@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'footprints',email: 'addfs45@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'payroll',email: 'hfhhfg@gmail.com',event: 'processed' },{ office: 'abc',reportName: 'footprints',email: 'hfhhfg@gmail.com',event: 'delivered' },{ office: 'abc',reportName: 'payroll',email: 'addfs45@gmail.com',event: 'processed' },{ office: 'def',reportName: 'footprints',email: 'jjj@gmail.com',event: 'processed' },{ office: 'def',reportName: 'footprints',email: 'jjj@gmail.com',event: 'delivered' },{ office: 'def',reportName: 'footprints',email: 'xyz@gmail.com',event: 'processed' },{ office: 'def',reportName: 'payroll',email: 'abcdg45@gmail.com',event: 'delivered' },{ office: 'def',reportName: 'footprints',email: 'singh45@gmail.com',event: 'delivered' },{ office: 'def',reportName: 'payroll',email: 'jjj@gmail.com',event: 'delivered' },{ office: 'def',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'processed' },{ office: 'def',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'delivered' },{ office: 'def',reportName: 'payroll',email: 'jjj@gmail.com',event: 'open' },{ office: 'def',reportName: 'footprints',email: 'singh45@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'payroll',email: 'hfghf@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'singh45@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'xyz@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'ghthh@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'abcdg45@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hfgjg@gmail.com',event: 'open' },{ office: 'ghi',reportName: 'payroll',email: 'hdgdfhf333@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'hdgshgfhg@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'hhhhhhrt45@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'hdghdghhh@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'hfgjg@gmail.com',event: 'open' },{ office: 'ghi',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'jjhhh@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'payroll',email: 'hdhdhcgsfhgf@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'ggrr@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'payroll',email: 'hfgjg@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hfghf@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'vipin@indinnovation.com',event: 'processed' },{ office: 'ghi',reportName: 'payroll',email: 'ggrr@gmail.com',event: 'open' },{ office: 'ghi',reportName: 'footprints',email: 'hdhdhcgsfhgf@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'hdgshgfhg@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'ghthh@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'xyz@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'hfghf@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'ggrr@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hhhhhhrt45@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'ghthh@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'hfgjg@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'singh45@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'vipin@indinnovation.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hdgdfhf333@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'hdghdghhh@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'jjhhh@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'jjhhh@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hfgjg@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'hdgshgfhg@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hhhhhhrt45@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'hdgdfhf333@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'xyz@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hdhdhcgsfhgf@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'footprints',email: 'hdghdghhh@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'vipin@indinnovation.com',event: 'open' },{ office: 'ghi',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'processed' },{ office: 'ghi',reportName: 'footprints',email: 'ggrr@gmail.com',event: 'delivered' },{ office: 'ghi',reportName: 'payroll',email: 'singh45@gmail.com',event: 'delivered' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'anami@thotslab.com',event: 'open' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'processed' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'xyz@gmail.com',event: 'delivered' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'xyz@gmail.com',event: 'processed' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'singh45@gmail.com',event: 'processed' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'singh45@gmail.com',event: 'delivered' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'abcdg45@gmail.com',event: 'delivered' },{ office: 'hhhfgfg',reportName: 'footprints',email: 'hgdfchgf@gmail.com',event: 'processed' },];


const result = data.reduce((a, c) => {
  let o = a.find(v => (v.office === c.office && v.reportName === c.reportName));
  if (!o) {
    o = {
      office: c.office,
      reportName: c.reportName,
      email: new Set(),
      recEmail: new Set(),
      processEmail: new Set(),
      openEmail: new Set()
    };
    a.push(o);
  }
  
  o.email.add(c.email);
  
  switch(c.event) {
    case 'processed':
      o.processEmail.add(c.email);
      break;
    case 'delivered':
      o.recEmail.add(c.email);
      break;
    case 'open':
      o.openEmail.add(c.email);
      break;
  }
  return a;
}, [])
.map((v) => ({
  ...v,
  email: [...v.email].join(),
  processEmail: [...v.processEmail].join(),
  recEmail: [...v.recEmail].join(),
  openEmail: [...v.openEmail].join()
}));

console.log(result);

Для этого нужно сначала проверить (вызов a.find(..)), был ли уже создан объект для office и reportName объекта на текущая итерация (c). Если это не так, он создается и добавляется в массив результатов, а затем оператор switch добавляет электронное письмо к соответствующему свойству найденного / созданного объекта.

Этот подход не так эффективен, поскольку вызова .find на каждой итерации, его можно улучшить, используя Map или object с ключами c.office + c.reportName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...