-1

I have JSON like this:

[
  {
    "id": 9,
    "job_id": 302,
    "user_id": 63,
    "message": "User message 1",
    "created_at": 1584091342
  },
  {
    "id": 10,
    "job_id": 302,
    "user_id": 63,
    "message": "User message 2",
    "created_at": 1584095994
  },
  {
    "id": 14,
    "job_id": 302,
    "user_id": 63,
    "message": "Hello",
    "created_at": 1584102257
  },
]

How to group messages by date, something like this? (I'm using moment.js to format unix timestamp)

enter image description here

0

1 Answer 1

2

We can use the array function reduce for this:

We just also need to turn your data in milliseconds to days.

const data = [
  {
    "id": 9,
    "job_id": 302,
    "user_id": 63,
    "message": "User message 1",
    "created_at": 1584130559280
  },
  {
    "id": 10,
    "job_id": 302,
    "user_id": 63,
    "message": "User message 2",
    "created_at": 1584130559280
  },
  {
    "id": 14,
    "job_id": 302,
    "user_id": 63,
    "message": "Hello",
    "created_at": 1584216959280
  },
  {
    "id": 15,
    "job_id": 302,
    "user_id": 63,
    "message": "World",
    "created_at": 1584216959280
  }  
]

const groupedData = data.reduce((aggObj, child) => {
  const myDate = new Date(child.created_at);
  //console.log(myDate.toDateString());
  //console.log(myDate.getTime());
  if (aggObj.hasOwnProperty(myDate.toDateString())){
    aggObj[myDate.toDateString()].push(child);
  } else {
    aggObj[myDate.toDateString()] = [child];
  }    
  return aggObj
}, {})

console.log(groupedData);
.as-console-wrapper { max-height: 100% !important; top: 0; }

I changed the created_at values so the first two messages are from yesterday and the last two from today.

The output is:

{
  "Fri Mar 13 2020": [
    {
      "id": 9,
      "job_id": 302,
      "user_id": 63,
      "message": "User message 1",
      "created_at": 1584130559280
    },
    {
      "id": 10,
      "job_id": 302,
      "user_id": 63,
      "message": "User message 2",
      "created_at": 1584130559280
    }
  ],
  "Sat Mar 14 2020": [
    {
      "id": 14,
      "job_id": 302,
      "user_id": 63,
      "message": "Hello",
      "created_at": 1584216959280
    },
    {
      "id": 15,
      "job_id": 302,
      "user_id": 63,
      "message": "World",
      "created_at": 1584216959280
    }
  ]
}
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.