0

I have an array of objects like

const data = [
{date: "2020-12-21", time: "09:10:00"},
{date: "2020-12-21", time: "09:20:00"},
{date: "2020-12-21", time: "09:30:00"},
{date: "2020-12-22", time: "12:50:00"},
{date: "2020-12-22", time: "13:00:00"},
{date: "2020-12-22", time: "13:10:00"},
{date: "2020-12-22", time: "13:20:00"},
{date: "2020-12-23", time: "10:40:00"},
{date: "2020-12-23", time: "10:50:00"},
{date: "2020-12-23", time: "11:00:00"},

]

I am trying to get the below-filtered result using javascript. Can someone help me?

data = [
    {date: "2020-12-21", time: ["09:10:00", "09:20:00","09:30:00" ]},
    {date: "2020-12-22", time: ["12:50:00", "13:00:00","13:10:00" ]},
    {date: "2020-12-23", time: ["10:40:00","10:50:00","11:00:00" ]},
    ]

2 Answers2

1

You can use reduce to achieve this,

const data = [
{date: "2020-12-21", time: "09:10:00"},
{date: "2020-12-21", time: "09:20:00"},
{date: "2020-12-21", time: "09:30:00"},
{date: "2020-12-22", time: "12:50:00"},
{date: "2020-12-22", time: "13:00:00"},
{date: "2020-12-22", time: "13:10:00"},
{date: "2020-12-22", time: "13:20:00"},
{date: "2020-12-23", time: "10:40:00"},
{date: "2020-12-23", time: "10:50:00"},
{date: "2020-12-23", time: "11:00:00"},

]

let res = data.reduce((acc, curr) => {
  let index = acc.findIndex(item => item.date === curr.date);
  if(index > -1) {
    acc[index].time.push(curr.time);
  }
  else acc.push({date: curr.date, time: [curr.time]});
  return acc;
}, [])

console.log(res);
Md Sabbir Alam
  • 4,937
  • 3
  • 15
  • 30
1

const data = [
  {date: "2020-12-21", time: "09:10:00"},
  {date: "2020-12-21", time: "09:20:00"},
  {date: "2020-12-21", time: "09:30:00"},
  {date: "2020-12-22", time: "12:50:00"},
  {date: "2020-12-22", time: "13:00:00"},
  {date: "2020-12-22", time: "13:10:00"},
  {date: "2020-12-22", time: "13:20:00"},
  {date: "2020-12-23", time: "10:40:00"},
  {date: "2020-12-23", time: "10:50:00"},
  {date: "2020-12-23", time: "11:00:00"},
]

const output = data.reduce((acc, cur) => {
  if (!acc[cur.date]) acc[cur.date] = {
    date: cur.date,
    time: []
  };
  acc[cur.date].time.push(cur.time);
  return acc;
}, {});

const result = Object.values(output)

console.log(result);
wangdev87
  • 8,611
  • 3
  • 8
  • 31