检查数组的值javascript

时间:2016-08-18 14:02:08

标签: javascript angularjs

我的角度控制器中有以下内容

MyUserService.getUserRoles().then(function (data) {
    var userInValidRole = false;
    var role1 = "Role1";
    var role2 = "Role2";

    if ((data.indexOf(role1) > -1) || data.indexOf(role2 ) > -1) {
        userInValidRole = true;
    }

这是按预期工作的。但是我希望做的事情如下:

var validRoles = ["Role1", "Role"];

然后检查

    if ((data.indexOf(validRoles) > -1)) {
        userInValidRole = true;
    }

然而它没有按预期工作 - 我做错了吗?

2 个答案:

答案 0 :(得分:5)

您可以使用Array.prototype.some检查data中的任何角色是否为validRole。而且,正如@ adam-beck在下面建议的那样,你可以摆脱if声明:

var validRoles = ['Role1', 'Role2'],
    userInValidRole = data.some(function(r){ return validRoles.indexOf(r) > -1; });

该方法的优点是性能。一旦找到正确的值,它就会停止循环(与.forEach().map().filter()不同...)

答案 1 :(得分:0)

检查此帖Simplest code for array intersection in javascript

中提到的阵列交集
if(data.filter(function(n) {
    return validRoles.indexOf(n) != -1;
}).length > 0){
userInValidRole = true;
}

注意:如果您希望用户同时拥有这两个角色,请检查长度== validRoles.length