检查js中数组中是否存在角色的最佳方法是什么?

时间:2018-03-20 05:43:47

标签: javascript arrays

我已在db中的数组中保存了用户的角​​色。 roles数组看起来像这样。

{
    "_id" : ObjectId("5708a54c8becc5b357ad82bb"),
    "__v" : 2,
    "active" : true,
    "adminReports" : [],
    "created" : ISODate("2016-04-09T06:46:36.814Z"),
    "displayName" : "Admin Local",
    "email" : "admin@localhost.com",
    "firstName" : "Admin",
    "groups" : [],
    "lastLogin" : ISODate("2016-12-29T13:34:48.592Z"),
    "lastName" : "Local",
    "password" : "jYQB4vNsJLkkSveGZygN3llMMHbNkZWnnQZuaV4l0NAoOixh2JndlNFojigHz4Sus5St8loOWaKeKTtPVDwY4Q==",
    "profileImageURL" : "modules/users/client/img/profile/default.png",
    "provider" : "local",
    "roles" : [ 
        "superAdmin", "admin","manager","user"
    ],
    "salt" : "1v/XyKlUdhNqgEBPaAPSeA==",
    "userWeeklyReport" : true,
    "username" : "admin"
}

当我必须检查登录用户是管理员还是管理员时,我正在用 indexOf 检查它,这是正确的方法,但我的代码看起来不太好。如果我必须检查登录用户是管理员 CEO 还是经理,这是一个片段。

if(req.user.roles.indexOf('admin') !== -1 || req.user.roles.indexOf('manager') !== -1 || req.user.roles.indexOf('CEO') !== -1){
    //some code goes here
}

有很多indexOf,看起来不太好。任何人都可以告诉我这样做的正确方法,以便我的代码看起来更具可读性 提前谢谢。

3 个答案:

答案 0 :(得分:4)

您可以使用array#some检查role中是否存在数组中存储的req.user.rolesarray#includes将检查所选角色是否存在于req.user.roles

if(['admin','manager','CEO'].some(role => req.user.roles.includes(role)))

答案 1 :(得分:1)

if(req.user.roles.indexOf('admin') !== -1 //Rest of the code}可能永远不会为-1,因为数组包含您要检查的所有角色。

您需要在变量中获取登录用户的角色,并检查角色数组中是否存在该角色,因为只有一个indexOf就足够了

var someRoles = 'admin'
if(req.user.roles.indexOf(someRoles )){
        //some code goes here
    }

答案 2 :(得分:0)

如果你对ES6没问题,那么Array#some()就可以了。

let matched= ["admin","manager","CEO"].some(s=> req.user.roles.indexOf(s) !== -1)