Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Group and count array by date in javascript

I’m having a problem grouping this data using javascript. Just starting my career using pure javascript and nodeJS for building a website application.

here’s my data result using typeORM.

let data = [
            {
              control_no: '01-55-10-021-000001',
              date_created: '2023-01-05',
              validated: '1',
              date_validated: '2023-01-06',
              submitted: '1',
              date_submitted: '2023-01-07'
            },
            {
              control_no: '01-55-10-016-000190',
              date_created: '2023-01-05',
              validated: '1',
              date_validated: '2023-01-06',
              submitted: '0',
              date_submitted: null
            },
            {
              control_no: '01-55-10-001-000001',
              date_created: '2023-01-06',
              validated: '0',
              date_validated: null,
              submitted: '0',
              date_submitted: null
            },
            {
              control_no: '01-55-10-001-000002',
              date_created: '2023-01-06',
              validated: '0',
              date_validated: null,
              submitted: '0',
              date_submitted: null
            },
            {
              control_no: '01-55-10-001-000003',
              date_created: '2023-01-06',
              validated: '0',
              date_validated: null,
              submitted: '0',
              date_submitted: null
            },
            {
              control_no: '01-55-10-001-000004',
              date_created: '2023-01-06',
              validated: '1',
              date_validated: '2023-01-07',
              submitted: '1',
              date_submitted: '2023-01-08'
            },
            {
              control_no: '01-55-10-001-000005',
              date_created: '2023-01-06',
              validated: '1',
              date_validated: '2023-01-07',
              submitted: '0',
              date_submitted: null
            },
            {
              control_no: '01-55-10-001-000006',
              date_created: '2023-01-06',
              validated: '1',
              date_validated: '2023-01-07',
              submitted: '1',
              date_submitted: '2023-01-08'
            },
            {
              control_no: '01-55-10-001-000007',
              date_created: '2023-01-09',
              validated: '0',
              date_validated: null,
              submitted: '0',
              date_submitted: null
            },
            {
              control_no: '01-55-10-001-000008',
              date_created: '2023-01-09',
              validated: '0',
              date_validated: null,
              submitted: '0',
              date_submitted: null
            }
          ];

now i want to have this structure of data where i want to count all data as created then count all validated data as validated and all tagged as submitted as submitted by date

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

let created = [
                {
                    date: '2023-01-05',
                    count: 2
                },
                {
                    date: '2023-01-06',
                    count: 6
                },
                {
                    date: '2023-01-09',
                    count: 2
                }
            ];

            let validated = [
                {
                    date: '2023-01-06',
                    count: 2
                },
                {
                    date: '2023-01-07',
                    count: 3
                }
            ]

            let submitted = [
                {
                    date: '2023-01-07',
                    count: 1
                },
                {
                    date: '2023-01-08',
                    count: 2
                }
            ]

then sort by date.

i’m not that good in manipulating arrays using javascript, been in PHP in so many years.

>Solution :

You can do this by using 1 reduce.But I am using 3 different reduce function

  1. For Created:
let created = data.reduce((acc, curr) => {
  let key = curr.date_created;
  if (!acc[key]) {
    acc[key] = {
      date: key,
      count: 1
    };
  } else {
    acc[key].count++;
  }
  return acc;
}, {});

// convert the object to array
created = Object.values(created); 

//  sort data by date
created.sort((a,b) => new Date(a.date) - new Date(b.date)); 

console.log(created)
  1. for validated
let validated = data.reduce((acc, curr) => {
  let key = curr.date_validated;
  if (!acc[key]) {
    acc[key] = {
      date: key,
      count: 1
    };
  } else {
    acc[key].count++;
  }
  return acc;
}, {});

// convert the object to array
validated = Object.values(validated); 

// remove the null value
validated = validated.filter(val => val.date != null) 

// sort the data by date
validated.sort((a,b) => new Date(a.date) - new Date(b.date));

3.For submitted

let submitted = data.reduce((acc, curr) => {
  let key = curr.date_submitted;
  if (!acc[key]) {
    acc[key] = {
      date: key,
      count: 1
    };
  } else {
    acc[key].count++;
  }
  return acc;
}, {});

// convert the object to array
submitted = Object.values(submitted); 

// remove the null values
submitted = submitted.filter(val => val.date != null) 

//sort the data by date
submitted.sort((a, b) => new Date(a.date) - new Date(b.date));

If you still face any issue. Please let me know

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading