javascript - 重构嵌套循环以获得更好的性能
问题描述
我创建了一个函数,该函数创建一个数组数组,其中根据用户操作创建内部数组。首先让我向您展示功能
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 来自用户输入。如果值为“无”,我们返回原始数组,例如
[
{
_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',
}
]
如果它不是'none',我们将返回一个数组数组,其中内部数组组按对象的键/值对分组。例如,如果用户想要按 projectTitle 进行分组,那么结果数组将是
[
[
{
_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',
}
]
]
有没有办法删除嵌套循环(for循环,一些)并使函数更有效。谢谢你的建议。
解决方案
推荐阅读
- python - 安装包
- reactjs - React:如何解决错误:对象的类型为“未知”?
- c# - 什么是适合我的案例的基于 MVC 的 OOP 设计?
- python - 命令引发异常:AttributeError:“用户”对象没有属性“角色”
- python - Aiohttp 在浏览器正常打开的某些网站上引发证书错误
- python - 如何使下一个“for”循环从前一个循环继续循环到字典?
- html - 显示移动视图的桌面视图
- r - 段落在 \text@ 完成之前结束。
\par - flutter - 这是什么意思:“text_painter.dart:断言失败:第 900 行 pos 12:'!_needsLayout':不正确”?
- wordpress - WordPress 查询:仅将规则应用于特定的帖子类型