2016-06-09 8 views
0

Ich habe den unten stehenden Javascript 'Unterstrich' Code, der prüft, ob der angegebene USER_ROLES mindestens einen VALID_ROLES hat. Wenn dies der Fall ist, wird wahr oder falsch zurückgegeben. Es funktioniert gut.Wie überprüfe ich ein Javascript-Array, das mindestens einen Wert enthält, der mit einem bestimmten Text beginnt (zB ROLE_)

Aber ich möchte es so umgestalten, dass ich die fest codierten Rollen VALID_ROLES entfernen möchte und überprüfen möchte, ob es mindestens eine Rolle gibt, die mit ROLE_ beginnt. Wie kann es gemacht werden?

  // Function to check if least one valid role is present 
     var USER_ROLES = ['ROLE_5']; 

     function hasAnyRole(USER_ROLES) { 

      var VALID_ROLES = [ 'ROLE_1', 'ROLE_2', 'ROLE_3', 'ROLE_4' ]; 

      for (var i = 0; i < USER_ROLES.length; i++) { 
       if (_.contains(VALID_ROLES, USER_ROLES[i])) { 
        console.log("Found a valid role, returning true."); 
        return true; 
       } 
      } 
      console.log("No valid role found, returning false.");    
      return false; 
     } 
+0

Try underscore.any (USER_ROLES, Funktion (Rolle) {return role.substring (0, 5) === "ROLE_";}) – netoctone

+0

@netoctone Danke, es funktioniert. Sind any() und einige() Unterstriche gleich? – Jay

+0

ja http://underscorejs.org/#some Wenn Sie ältere Browser nicht unterstützen müssen, können Sie auch ES 5.1 Array.prototype.some http://www.ecma-international.org/ecma verwenden -262/5.1/# sec-15.4.4.17 – netoctone

Antwort

1

Sie sind ziemlich nah, aber für das, was Sie wollen, gibt es keine Notwendigkeit Strich zu verwenden:

for (var i = 0; i < USER_ROLES.length; i++) { 
    if (typeof USER_ROLES[i].indexOf == "function" && USER_ROLES[i].indexOf("ROLE_") > -1) { 
     console.log("Found a valid role, returning true."); 
     //return true; 
    } 
} 
+0

Danke, es funktioniert. – Jay

0

verwenden. keine Notwendigkeit, von Unterstrichen können Sie .some Array verwenden

USER_ROLES.some(function(value){ 
return value.substring(0, 5) === "ROLE_"; 
}); 
0
var index, value, result; 
for (index = 0; index < USER_ROLES.length; ++index) { 
    value = USER_ROLES[index]; 
    if (value.substring(0, 5) === "ROLE_") { 
     // You've found it, the full text is in `value`. 
     // So you might grab it and break the loop, although 
     // really what you do having found it depends on 
     // what you need. 
     result = value; 
     break; 
    } 
} 

// Use `result` here, it will be `undefined` if not found