-1

I tray to transform array to array and object grouped by value. I have two cases, ned to get items like

items={{
'2012-05-22': [{title: 'item 1 - any js object', summary:'ttttt ddddd'}],
'2012-05-23': [{title: 'item 2 - any js object', summary:'ttttt ddddd'}],
'2012-05-25': [{title: 'item 3 - any js object', summary:'ttttt ddddd'}, {name: 'any js 
 object', summary:'ttttt ddddd'}]
}}

items=[
   {
     title: 2012-05-22,
     data: [
         {title: 'Pilates ABC', summary:'ttttt ddddd'},
         {title: 'Vinyasa Yoga', summary:'ttttt ddddd'}
       ]
   },
   {
     title: 2012-05-21,
     data: [
         {title: 'Pilates ABC', summary:'ttttt ddddd'},
         {title: 'Vinyasa Yoga', summary:'ttttt ddddd'}
        ]
   },

My array looks like

 lists = [
  {
    date: "2020-12-21",
    summary: "event",
    title: "title",
  },
   {
    date: "2020-12-21",
    summary: "event 2",
    title: "title 2",
  },
  {
    date: "2020-12-22",
    summary: "event",
    title: "title",
   },
 ]

I try to reduce array, if have two identical dates get only one.

const reduce = lists.reduce((accc, currentItemm) => {
     const { date, ...coolItem } = currentItemm;
     accc[date] = [coolItem];
    return accc;
 }, {});

What is the simple and best way to refactoring array inti to new arrays - objects.

Ismeet
  • 419
  • 5
  • 19
  • Does this answer your question? [How to group an array of objects by key](https://stackoverflow.com/questions/40774697/how-to-group-an-array-of-objects-by-key) – pilchard Dec 30 '20 at 13:46

1 Answers1

1

lists = [{
        date: "2020-12-21",
        summary: "event",
        title: "title",
    },
    {
        date: "2020-12-21",
        summary: "event 2",
        title: "title 2",
    },
    {
        date: "2020-12-22",
        summary: "event",
        title: "title",
    },
]

const result1 = lists.reduce((acc, curr) => {
    const temp = {
        summary: curr.summary,
        title: curr.title
    };
    acc[curr.date] = acc[curr.date] ? acc[curr.date] = [temp, ...acc[curr.date]] : acc[curr.date] = [temp];
    return acc;
}, {});
console.log(result1)

const result2 = Object.keys(result1).map(item => {
    return {
        title: item,
        data: result1[item]
    }
})
console.log(result2)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Nilesh Patel
  • 3,193
  • 6
  • 12