A continuación se muestra mi objeto Json.
[{section: 'group_date', category: 'Support', category_value: '2021-10-11', datavalue: '2'} {section: 'group_date', category: 'Support', category_value: '2021-10-20', datavalue: '3'} {section: 'group_date', category: 'Support', category_value: '2021-11-02', datavalue: '1'} {section: 'group_date', category: 'Dev', category_value: '2021-11-02', datavalue: '1'} {section: 'group_date', category: 'Dev', category_value: '2021-11-03', datavalue: '1'}]Estoy tratando de crear una nueva matriz, como la que se muestra a continuación.
[ {category:'Support', value:[ ['2021-10-11','2'], ['2021-10-20','3'], ['2021-11-02','1'] ]}, {category:'Dev', value[ ['2021-11-02','1'], ['2021-11-03','1'] ]}]Podrías hacerlo así usando algo de destructuring y Array#reduce :
let data = [ { section: 'group_date', category: 'Support', category_value: '2021-10-11', datavalue: '2', }, { section: 'group_date', category: 'Support', category_value: '2021-10-20', datavalue: '3', }, { section: 'group_date', category: 'Support', category_value: '2021-11-02', datavalue: '1', }, { section: 'group_date', category: 'Dev', category_value: '2021-11-02', datavalue: '1', }, { section: 'group_date', category: 'Dev', category_value: '2021-11-03', datavalue: '1', }, ]; let seen = []; let res = data.reduce((acc, { category, category_value, datavalue }) => { let index = seen.indexOf(category); if (index === -1) { seen.push(category); acc.push({ category, value: [[category_value, datavalue]] }); } else { acc[index].value.push([category_value, datavalue]); } return acc; }, []); console.log(res); O así usando un bucle for...of en su lugar:
let data = [ { section: 'group_date', category: 'Support', category_value: '2021-10-11', datavalue: '2', }, { section: 'group_date', category: 'Support', category_value: '2021-10-20', datavalue: '3', }, { section: 'group_date', category: 'Support', category_value: '2021-11-02', datavalue: '1', }, { section: 'group_date', category: 'Dev', category_value: '2021-11-02', datavalue: '1', }, { section: 'group_date', category: 'Dev', category_value: '2021-11-03', datavalue: '1', }, ]; let res = []; let seen = []; for ({ category, category_value, datavalue } of data) { let index = seen.indexOf(category); if (index === -1) { seen.push(category); res.push({ category, value: [[category_value, datavalue]] }); } else { res[index].value.push([category_value, datavalue]); } } console.log(res);Creo que usar un bucle for aquí debería estar bien. Algo como:
let newObject = {}; let originalList = [{section: 'group_date', category: 'Support', category_value: '2021-10-11', datavalue: '2'} {section: 'group_date', category: 'Support', category_value: '2021-10-20', datavalue: '3'} {section: 'group_date', category: 'Support', category_value: '2021-11-02', datavalue: '1'} {section: 'group_date', category: 'Dev', category_value: '2021-11-02', datavalue: '1'} {section: 'group_date', category: 'Dev', category_value: '2021-11-03', datavalue: '1'}] originalList.forEach(item => { if (item.category in newObject) { newObject[item.category].push([item.category_value, item.datavalue]) } else { newObject[item.category] = [[item.category_value, item.datavalue]] } }