1

I have a data like this:

const input = [ {title: 'head', value: a, amount: 10},
                {title: 'head', value: b, amount: 5},
                {title: 'body', value: c, amount: 20} ];

I want to make an array of object literals with data like this:

const output = [{title: 'head',
                 values: [{value: a, amount: 10},
                          {value: b, amount: 5}]
                },
                {title: 'body',
                 values: [{value: a, amount: 20}]
                }];

since I'm not used to javascript, I'm having trouble wrapping values by title.

plz help me.

rin
  • 65
  • 1
  • 7
  • I found this thread which is related to your question: https://stackoverflow.com/questions/40774697/how-can-i-group-an-array-of-objects-by-key – AG_1380 Jul 29 '22 at 10:17
  • Does this answer your question? [How can I group an array of objects by key?](https://stackoverflow.com/questions/40774697/how-can-i-group-an-array-of-objects-by-key) – Normal Jul 29 '22 at 10:19
  • I already see those answers, but I need to describe key 'title' instead of using value as a key. but thanks for the links! – rin Jul 29 '22 at 10:24

1 Answers1

3

You can use Set to get the unique values and then map matching entries to the result like this:

const out = [...new Set(input.map(i=>i.title))].map(e=>{
    return {
        title: e,
        values: input.filter(p=>p.title === e).map(p=>{
            return {
                value: p.value,
                amount: p.amount
            };
        })
    };
});
soupy-norman
  • 403
  • 2
  • 11