2012-08-01 12 views
7

tengo una matriz con permisos de Facebook y una matriz de los permisos que el usuario da shouldve:comparar dos matrices si claves coinciden con underscore.js

window.FB.api('/me/permissions', function(perm){      
    if(perm){ 
     var given_permissions = _.keys(perm['data'][0]; 
     var needed_permissions = ["publish_stream", "email"]; 
     //now check if given permissions contains needed permissions 
    } 
} 

Ahora quiero comparar si todo el needed_permissions son en given_permissions, en una forma inteligente de subrayado (sin bucles dos arreglos yo mismo y comparar valores). Vi un método _.include, pero esto compara una matriz con un valor. Quiero volver verdadero si todos los permisos están disponibles y de lo contrario es falso. Estaba buscando una buena línea de llamada si es posible.

La razón para esto es que FB.login devuelve verdadero incluso si el usuario elige cancelar los permisos extendidos. Entonces necesito verificar esto dos veces.

Respuesta

4

¿Qué le parece esto?

_.all(needed_permissions, function(v){ 
    return _.include(given_permissions, v); 
}); 
18

Usted podría utilizar _.difference para ver si la eliminación de los permisos dados de sus permisos requeridos deja nada atrás:

var diff = _(needed_permissions).difference(given_permissions) 
if(diff.length > 0) 
    // Some permissions were not granted 

Un bonito efecto secundario de esto es que usted obtenga los permisos que faltan en diff en el caso quieres decirles lo que está mal.

+0

También es una buena solución. Tendré que marcar el otro como respuesta, porque básicamente eso es lo que pedí, pero creo que usaré esta solución para poder proporcionar mejores comentarios. – Jareish

+0

No estoy de acuerdo y creo que sería mucho más útil hacer de esto su respuesta aceptada. _.difference es exactamente lo que pediste ("compara dos matrices si las claves coinciden con underscore.js"; el resto fue realmente especulación, creo) y de hecho la respuesta que "aceptaste" porque la usaste. Solo un pensamiento para ayudar a otros a mirar esto. Supongo que no todos revisarán la respuesta aceptada. La respuesta aceptada es bastante pobre como solución, ya que no agrega nada cuando el subrayado proporciona una función para hacer exactamente eso "fuera de la caja". – SuperDuperApps

0

Última respuesta, pero esto funciona para mí: _.isEqual(given_permissions, needed_permissions);

Cuestiones relacionadas