2012-08-01 8 views
7

ich ein Array mit Berechtigungen von Facebook und eine Reihe der Berechtigungen, die der Benutzer angegeben shouldve:vergleichen zwei Arrays, wenn Tasten mit Underscore.js übereinstimmen

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 
    } 
} 

Jetzt will ich vergleichen, wenn alle needed_permissions sind in given_permissions, in einem Unterstrich versierte Weise (ohne selbst zwei Arrays zu wiederholen und Werte zu vergleichen). Ich sah eine _.include Methode, aber dies vergleicht ein Array mit einem Wert. Ich möchte den Wert true zurückgeben, wenn alle Berechtigungen verfügbar sind, und andernfalls false. Ich war auf der Suche nach einem netten Einzelanruf wenn möglich.

Der Grund dafür ist, dass FB.login True zurückgibt, auch wenn der Benutzer die erweiterten Berechtigungen abbrechen möchte. Also muss ich das überprüfen.

Antwort

4

Wie wäre es damit?

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

Sie _.difference wenn das Entfernen der angegebenen Berechtigungen von Ihrem erforderlichen Berechtigungen alles hinter sich lässt, um zu sehen verwenden:

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

Ein schöner Nebeneffekt davon ist, dass Sie die fehlenden Berechtigungen in diff in Fall erhalten Sie wollen ihnen sagen, was falsch ist.

+0

Das ist auch eine nette Lösung. Ich muss den anderen als Antwort markieren, weil das genau das ist, wonach ich gefragt habe, aber ich denke, dass ich diese Lösung verwenden werde, damit ich besseres Feedback geben kann. – Jareish

+0

Ich stimme nicht zu und denke, es wäre viel nützlicher, dies Ihre akzeptierte Antwort zu machen. _.difference ist genau das, wonach Sie gefragt haben ("Vergleichen Sie zwei Arrays, wenn Schlüssel mit underscore.js übereinstimmen" - der Rest war wirklich Spekulation, denke ich) und tatsächlich die Antwort, die Sie "akzeptiert" haben, weil Sie sie benutzt haben! Nur ein Gedanke, um anderen dabei zu helfen. Ich denke, dass nicht jeder die angenommene Antwort überprüfen wird. Die akzeptierte Antwort ist ziemlich schlecht als Lösung, da sie nichts hinzufügt, wenn Unterstreichung eine Funktion bereitstellt, um genau das "out of the box" zu tun. – SuperDuperApps

0

Späte Antwort, aber das funktioniert für mich: _.isEqual(given_permissions, needed_permissions);

Verwandte Themen