检查数组的值javascript

Ctr*_*eat 2 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

var validRoles = ["Role1", "Role"];
Run Code Online (Sandbox Code Playgroud)

然后检查

    if ((data.indexOf(validRoles) > -1)) {
        userInValidRole = true;
    }
Run Code Online (Sandbox Code Playgroud)

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

ble*_*lex 5

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

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

该方法的优点是性能.只要找到正确的值,它停止循环(不像.forEach(),.map(),.filter()...)