【问题标题】:Typescript - get array that satisfy a conditionTypescript - 获取满足条件的数组
【发布时间】:2019-05-13 10:32:39
【问题描述】:

是否可以从给定的包含角色=1 的输出数组中获取没有重复的输出数组? 我正在使用 Angular 6 打字稿。是否有任何打字稿数组处理函数来执行此操作 //输入数组

export const userMenus = [
{
    name: 'Dashboard',
    url: '/dashboards',
    icon: 'icon-speedometer',
    roles:'1,3,4'
},
  {
    name: 'Users',
    url: '/Users',
    icon: 'icon-bell',
    roles:'1,2,3,4'
  },
  {
    name: 'Article',
    url: '/Users',
    icon: 'icon-bell',
    roles:'1,2,3,4',
    children: [
             {
              name: 'Cards',
               url: '/base/cards',
               icon: 'icon-puzzle',
               roles:'1,3,4',
             },
             {
               name: 'Carousels',
               url: '/base/carousels',
               icon: 'icon-puzzle',
               roles:'2,4',
             },
             {
               name: 'Collapses',
               url: '/base/collapses',
               icon: 'icon-puzzle',
               roles:'4'
             }
            ]      
  }

]

--如果角色为 2,则需要输出。 删除了角色字段中不包含 2 的项目

userMenus = [
  {
    name: 'Users',
    url: '/Users',
    icon: 'icon-bell',
    roles:'1,2,3,4'
  },
  {
    name: 'Article',
    url: '/Users',
    icon: 'icon-bell',
    roles:'1,2,3,4',
    children: [
             {
               name: 'Carousels',
               url: '/base/carousels',
               icon: 'icon-puzzle',
               roles:'2,4',
             },
            ]      
  }

【问题讨论】:

  • 你在你的阵列上尝试过 .filter(role === '1') 吗?
  • const filteredUserMenus = userMenus.filter((userMenu) => { return userMenu.roles === '2'; });这行得通,但是我的数组的字段类似于角色:'1,2',所以在其中找不到:(
  • 所以只需制作roles 和数组而不是字符串...

标签: javascript angular typescript ecmascript-6 angular6


【解决方案1】:

您必须过滤您的数组并验证您的角色中有 2 个:

const filteredUserMenus = userMenus.filter((userMenu) => {
  return userMenu.roles.find((role) => role === '2');
});

简短语法:

const filteredUserMenus = userMenus.filter((userMenu) => 
  userMenu.roles.find((role) => role === '2'));

编辑:你的数据结构不好,角色不应该是一个字符串,而是一个角色数组。无论如何,如果您无法更改它,这里有一个解决方案:

const filteredUserMenus = userMenus.filter((userMenu) => {
  return userMenu.roles.split(',').find((role) => role === '2');
});

简短语法:

const filteredUserMenus = userMenus.filter((userMenu) =>
   userMenu.roles.split(',').find((role) => role === '2'));

【讨论】:

  • 感谢弗洛里安的回复, const filteredUserMenus = userMenus.filter((userMenu) => { return userMenu.roles.find(2); });将得到错误 - [ts] 属性 'find' 在类型 'string' 上不存在。常量过滤用户菜单 = userMenus.filter((userMenu) => { return userMenu.roles === '2'; });这行得通,但是我的数组的字段类似于角色:'1,2',所以在其中找不到:(
  • @Vishnudas:我已经更新了答案。请注意,您的数据结构不应是字符串,而是字符串数组。如果可以的话,你应该改变结构,否则,使用编辑的解决方案
猜你喜欢
  • 2018-10-06
  • 2011-04-16
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
相关资源
最近更新 更多