我的角度控制器中有以下内容
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;
}
然而它没有按预期工作 - 我做错了吗?
答案 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