I created a function which creates an arrays of arrays where the inside arrays are created according to user action. First let me show you the function
const groupByArray = () => {
if (groupBy === PMDashboardGroupBy.NONE || !groupBy) {
return createDashboardTableData();
}
let result: any[] = [];
createDashboardTableData().forEach(data => {
if (result.length === 0) {
result = [[data]];
} else {
for (let i = 0; i < result.length; i++) {
if (
result[i].some((item: any) => item[groupBy] === data[groupBy])
) {
result[i] = [...result[i], data];
break;
} else if (result.length - 1 === i) {
result.push([data]);
break;
}
}
}
});
return result;
};
groupBy comes from user input. If the values is 'none' we return the original array e.g.
[
{
_id: '1',
projectTitle: 'Project title 1',
queryTitle: 'Query title 1',
submissionDate: '2012-11-04T14:51:06.157Z',
state: 'WAITING',
city: 'Prague',
type: 'My Craft',
},
{
_id: '2',
projectTitle: 'Project title 1',
queryTitle: 'Query title 2',
submissionDate: '2012-11-04T14:51:06.157Z',
state: 'WAITING',
city: 'Jihlava',
type: 'Open Craft',
},
{
_id: '3',
projectTitle: 'Project title 3',
queryTitle: 'Query title 1',
submissionDate: '2012-11-04T14:51:06.157Z',
state: 'ESTIMATED',
city: 'Prague',
type: 'My Craft',
}
]
if it's not 'none' we will return an array of array where the inside group of arrays are grouped by the key/value pair of the object. For instance if user wants to group by projectTitle than the resulting array of arrays would be
[
[
{
_id: '1',
projectTitle: 'Project title 1',
queryTitle: 'Query title 1',
submissionDate: '2012-11-04T14:51:06.157Z',
state: 'WAITING',
city: 'Prague',
type: 'My Craft',
},
{
_id: '2',
projectTitle: 'Project title 1',
queryTitle: 'Query title 2',
submissionDate: '2012-11-04T14:51:06.157Z',
state: 'WAITING',
city: 'Jihlava',
type: 'Open Craft',
},
],
[
{
_id: '3',
projectTitle: 'Project title 3',
queryTitle: 'Query title 1',
submissionDate: '2012-11-04T14:51:06.157Z',
state: 'ESTIMATED',
city: 'Prague',
type: 'My Craft',
}
]
]
Is there a way to remove the nested loops (for cycle, some) and make the function more efficient. Thank you for suggestions.