简体   繁体   English

将具有多个属性的对象数组分组并根据特定值提取值

[英]group an array of object with multiple properties and extract values based on the particular values

i wanted to group by an array of object with multiple field and i have done it and i wanted to concat the email first with respect to the reportName and then with respect to the particular events i have done that part but when i am doing that in the fields i get it undefined with them i want to remove that undefined and print only the strings of email.我想按具有多个字段的对象数组进行分组,我已经完成了,我想首先根据 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' },

 ] 

i have tried to solve this problem using this way我试图用这种方式解决这个问题

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] + ',';
        }
      });


    });

i am getting output in this way我以这种方式获得输出

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

but i wanted to get the output without undefined written in front of it.all the emails in it must be unique like my solution's output.但我想得到没有未定义写在它前面的输出。其中的所有电子邮件必须像我的解决方案的输出一样是唯一的。

You could group the mails and add the values to the distinct groups by taking a Set for getting unique emails.您可以将邮件分组并将值添加到不同的组中,方法是使用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; }

I think you've made this more complicated then it has to be, my approach will be something like this:我认为你已经使这变得更复杂了,我的方法将是这样的:

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

What this does is to first check (the a.find(..) call) if there was already an object created for the office and reportName of the object at the current iteration ( c ).它的作用是首先检查( a.find(..)调用)是否已经为当前迭代 ( c ) 的office和对象的reportName创建了一个对象。 If it wasn't, one is created and added to the result array and then, the switch statement adds the email to the appropriate property of the found/created object.如果不是,则创建一个并将其添加到结果数组中,然后switch语句将电子邮件添加到找到/创建的对象的适当属性中。

This approach is not that efficient because of the .find call at each iteration, it can be improved by using a Map or object which has as keys c.office + c.reportName .由于每次迭代.find调用.find ,这种方法效率不高,可以通过使用Map或具有c.office + c.reportName键的object来改进。

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

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