首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较数组中的JavaScript对象时出现问题

比较数组中的JavaScript对象时出现问题
EN

Stack Overflow用户
提问于 2020-11-26 00:01:00
回答 2查看 42关注 0票数 2

我有这两个信息数组。我想解决这个问题:(给定用户名和所需的权限,如果用户具有该权限,则返回true,否则返回false。)

代码语言:javascript
运行
复制
const groups = [
  {
    id: 1,
    name: 'admins',
    permissions: ['CREATE', 'DELETE', 'READ', 'WRITE'],
  },
  {
    id: 2,
    name: 'readers',
    permissions: ['READ'],
  },
  {
    id: 3,
    name: 'writers',
    permissions: ['WRITE'],
  },
  {
    id: 4,
    name: 'managers',
    permissions: ['CREATE', 'DELETE'],
  }
];

const users = [
  {
    name: 'john',
    groups: [1],
  },
  {
    name: 'mary',
    groups: [2, 3],
  },
  {
    name: 'alice',
    groups: [2]
  },
  {
    name: 'bob',
    groups: [3],
  },
  {
    name: 'eve',
    groups: [2, 4],
  },
];

到目前为止,我写的代码如下:

代码语言:javascript
运行
复制
function userHasPermission(userName, requiredPermission) {
  //looping through first array
  for (i = 0; i < users.length; i++) {

    if (users[i].name === userName) {
        // looping through the second array
        for (j = 0; j < groups.length; j++) {

            //here I don't know how to resolve this comparison, because as far as I understand it, the script has to check if userName is a valid ID inside groups array?
            if (users[i].groups.includes(groups[j].id) && (groups[j].permissions.includes(requiredPermission))) {
                return true;
            } else {
                return false;
            }
        }
    }
  }  
  
};

  userHasPermission("mary", "WRITE");

我对Vanilla JavaScript是个新手,我被困在这一点上,任何帮助都将不胜感激!

EN

Stack Overflow用户

发布于 2020-11-26 00:10:13

代码语言:javascript
运行
复制
function userHasPermission(userName, requiredPermission) {
  //looping through first array
  for (i = 0; i < users.length; i++) {

    if (users[i].name === userName) {
        // looping through the second array
        for (j = 0; j < groups.length; j++) {
            if (users[i].groups.includes(groups[j].id) && (groups[j].permissions.includes(requiredPermission))) {
                return true;
            } else {
                continue;  // don’t return false yet. 
            }
        }
    }
  }  
  // only when you’ve checked all possibilities
  // still find no match, now you can return definitely
  return false;
};

基于你的代码,上面的for循环风格是必不可少的。我个人更喜欢功能更强的代码风格。供您参考:

代码语言:javascript
运行
复制
function userHasPermission(userName, requiredPermission) {
  const targetUser = users.find(user => user.name === userName);
  if (!targetUser) return false;
  
  const userGroups = groups.filter(g => targetUser.groups.includes(g.id));
  const permissions = userGroups.flatMap(g => g.permissions);
  
  return permissions.includes(requiredPermission);
}
票数 3
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65008346

复制
相关文章

相似问题

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