首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何优化此方法(查找包含两个搜索的项)

如何优化此方法(查找包含两个搜索的项)
EN

Stack Overflow用户
提问于 2022-03-15 19:35:21
回答 1查看 32关注 0票数 0

我有一个有两个列表的对象。

代码语言:javascript
复制
const list = {
    Operator: [
      {
        Login: 'login1',
        PermissionGroup: '2',
        Sub: '3',
      },
      {
        Login: 'login2',
        PermissionGroup: '3',
        Sub: '2',
      },
    ],
    PermissionGroups: [
      {
        PermissionGroupId: '2',
        GroupsName: 'Gestor',
        PermissionLevel: 2,
      },
      {
        PermissionGroupId: '3',
        GroupsName: 'Lider',
        PermissionLevel: 3,
      },
    ],
  };

在我的剩馀部分,我有操作符的“子”。那我该怎么做..。

步骤1:获取我的Redux "sub“并找到它在哪个操作符中

步骤2:现在我有了操作符,我需要找到哪个操作符对应于PermissionGroup,使用PermissioninGroup(into操作符)和PermissionGroupId(into PermissionGroups)

这个方法做我想要的(忽略最后的返回),我如何优化这个方法?我不想用两个过滤器

代码语言:javascript
复制
const search = (sub) => {
    const usuario = listaUsuarios.filter((element) => element.Sub === sub)[0];

    const permissaoUsuario = listaPermissoes.filter(
      (element) => element.PermissionGroupId === usuario.PermissionGroup
    )[0];

    return permissaoUsuario.PermissionLevel;
  };
EN

回答 1

Stack Overflow用户

发布于 2022-03-16 01:32:03

就个人而言,当前的解决方案似乎还可以(当然,如果确认只需要.filter()的第0元素,则可能更倾向于使用.find() )。由于OP要求另一种解决方案,下面的解决方案(这不是我的建议)可能会达到预期的目标。

代码片段

代码语言:javascript
复制
const searchSub = (needle, {Operator, PermissionGroups}) => (
  [...Operator, ...PermissionGroups].reduce(
    (res, obj) => ({
      ...res,
      ...(
        'Sub' in obj && obj.Sub === needle
        ? {foundSub: {...obj}}
        : 'PermissionGroup' in res.foundSub &&
          'PermissionGroupId' in obj &&
          obj.PermissionGroupId === res.foundSub.PermissionGroup
          ? {matchedPermissionGroup: {...obj}}
          : {}
      )
    }),
    {foundSub: {}, matchedPermissionGroup: {}}
  )
);

const list = {
  'Operator': [{
      'Login': 'login1',
      'PermissionGroup': '2',
      'Sub': '3',
    },
    {
      'Login': 'login2',
      'PermissionGroup': '3',
      'Sub': '2',
    }
  ],
  'PermissionGroups': [{
      'PermissionGroupId': '2',
      'GroupsName': 'Gestor',
      'PermissionLevel': 2,
    },
    {
      'PermissionGroupId': '3',
      'GroupsName': 'Lider',
      'PermissionLevel': 3,
    },
  ]
};

console.log(searchSub('2', list))
console.log(
  'PermissionLevel: ',
  searchSub('2', list)?.matchedPermissionGroup.PermissionLevel
);

解释

  • 使用... spread操作符来构造一个数组,当发现<...>D17时,使用OperatorPermissionGroups数组
  • >使用.reduce()迭代该组合数组

>H 116,跟踪<...>D18目标代码>H 219H 120当找到匹配的<代码>D21时,跟踪该数组,以及H 222H 123所得到的res对象将具有Operator和d26数组中匹配的元素。

注意事项

  • 只是想重申一下,在这个上下文中只使用两个单独的.find()实际上更简单。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71488033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档