1

How to get all the office values from this and store it as a simple array?

var data = {
  'XYZ': [{
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'open',
      timestamp: '02-12-2019 00:15:29'
    },
    {
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'processed',
      timestamp: '02-12-2019 00:15:32'
    }
  ],
  'yyy': [{
      office: 'yyy.in',
      reportName: 'payroll',
      event: 'delivered',
      timestamp: '02-12-2019 00:15:29'
    },
    {
      office: 'yyy.in',
      reportName: 'payroll',
      event: 'open',
      timestamp: '02-12-2019 00:15:32'
    }
  ],
  'zzz': [{
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'delivered',
      timestamp: '02-12-2019 00:15:29'
    },
    {
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'open',
      timestamp: '02-12-2019 00:15:32'
    }
  ]
}

The output should be like:

officesArray = ['xyz.in', 'yyy.in', 'xyz.in']

my code is

var Office = (Object.entries(grpDatas).flatMap(([k, v]) => (v.forEach(({office})=> office))))

It prints array of undefined.

Aphrem Thomas
  • 263
  • 2
  • 8
Amar
  • 55
  • 1
  • 8

3 Answers3

2

Use map instead of forEach and also you're accessing email instead of office:

var data = {
  'XYZ': [{
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'open',
      timestamp: '02-12-2019 00:15:29'
    },
    {
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'processed',
      timestamp: '02-12-2019 00:15:32'
    }
  ],
  'yyy': [{
      office: 'yyy.in',
      reportName: 'payroll',
      event: 'delivered',
      timestamp: '02-12-2019 00:15:29'
    },
    {
      office: 'yyy.in',
      reportName: 'payroll',
      event: 'open',
      timestamp: '02-12-2019 00:15:32'
    }
  ],
  'zzz': [{
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'delivered',
      timestamp: '02-12-2019 00:15:29'
    },
    {
      office: 'xyz.in',
      reportName: 'payroll',
      event: 'open',
      timestamp: '02-12-2019 00:15:32'
    }
  ]
}

var Email = Object.values(data).flatMap(item => [...new Set(item.map(({office})=> office))])
console.log(Email)
Clarity
  • 10,730
  • 2
  • 25
  • 35
0

You could get unique values from the wanted properties.

var data = { XYZ: [{ office: 'xyz.in', reportName: 'payroll', event: 'open', timestamp: '02-12-2019 00:15:29' }, { office: 'xyz.in', reportName: 'payroll', event: 'processed', timestamp: '02-12-2019 00:15:32' }], yyy: [{ office: 'yyy.in', reportName: 'payroll', event: 'delivered', timestamp: '02-12-2019 00:15:29' }, { office: 'yyy.in', reportName: 'payroll', event: 'open', timestamp: '02-12-2019 00:15:32' }], zzz: [{ office: 'xyz.in', reportName: 'payroll', event: 'delivered', timestamp: '02-12-2019 00:15:29' }, { office: 'xyz.in', reportName: 'payroll', event: 'open', timestamp: '02-12-2019 00:15:32' }] },
    office = Object.values(data).flatMap(v => [...new Set(v.map(({ office }) => office))]);

console.log(office);
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
0

const result = Object.keys(data) .map( key => data[key]) .flat() .map( element => element.office)

Transforming everything to arrays and flattening them helps a lot!

https://codepen.io/t0dorakis/pen/MWYerKL