I have the following array of object that I want to chance its structure , I am trying to use reduce to get a new object with element that have the same group..
const arr = [{id: 'c8c443', group: 'a', equipment: 'ball'}, {id: 'c84445', group: 'a', equipment: 'ball'}, {id: 'c8c655', group: 'b', equipment: 'basketball'}, {id: 'c8c634', group: 'b', equipment: 'basketball'}] const newArr = arr.reduce( (obj: any, value: any, i) => [ ...obj, { group: value.map((el: any) => el.group), items: value.map((el: any) => el.equipment), }, ], [] ); // Results [{group: 'a', items: ['ball','ball']}, {group: 'b', items: ['basketball','basketball']}]
Advertisement
Answer
Here is an example:
const arr = [{id: 'c8c443', group: 'a', equipment: 'ball'}, {id: 'c84445', group: 'a', equipment: 'ball'}, {id: 'c8c655', group: 'b', equipment: 'basketball'}, {id: 'c8c634', group: 'b', equipment: 'basketball'}] const newArr = arr.reduce((acc, item) => { if (acc.some(key => key.group === item.group)) { acc = acc.map(i => i.group === item.group ? {...i, items: [...i.items, item.equipment]} : i) } else { acc.push({ group: item.group, items: [item.equipment] }) } return acc }, []) console.log(newArr)