2016-06-09 1 views
0

У меня есть нижний код jenscript 'underscore', который проверяет, имеет ли данный USER_ROLES хотя бы один VALID_ROLES. Если это так, возвращает true else false. Он отлично работает.Как проверить массив Javascript, содержащий хотя бы одно значение, которое начинается с определенного текста (например, ROLE_)

Но я хочу реорганизовать его так, что хочу удалить жестко закодированные роли VALID_ROLES и хочу проверить, есть ли хотя бы одна роль, которая начинается с ROLE_. Как это можно сделать?

  // 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, функция (роль) {вернуться role.substring (0, 5) === "ROLE_";}) – netoctone

+0

@netoctone Спасибо, что работает. Являются ли какие-либо() и некоторые() символы подчеркивания одинаковыми? – Jay

+0

yes http://underscorejs.org/#some Кроме того, если вам не нужно поддерживать старые браузеры, вы можете использовать ES 5.1 Array.prototype.some http://www.ecma-international.org/ecma -262/5.1/# sec-15.4.4.17 – netoctone

ответ

1

Вы очень близки, но за то, что вы хотите, нет необходимости использовать подчеркивание:

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

Спасибо, что это работает. – Jay

0

Используйте это. нет необходимости подчеркивания вы не можете использовать .some массив

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 
Смежные вопросы