首页 > 解决方案 > 重构嵌套循环以获得更好的性能

问题描述

我创建了一个函数,该函数创建一个数组数组,其中根据用户操作创建内部数组。首先让我向您展示功能

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循环,一些)并使函数更有效。谢谢你的建议。

标签: javascriptalgorithm

解决方案


推荐阅读