Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

compare two arrays if keys match with underscore.js

I have an array with permissions from Facebook and an array of the permissions that the user shouldve given:

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

Now I want to compare if all the needed_permissions are in given_permissions, in an underscore savvy way (without looping two arrays myself and compare values). I saw a _.include method, but this compares an array with a value. I want to return true if all the permissions are available and else a false. I was looking for a nice single line call if possible.

The reason for this is, that FB.login returns true even if the user chooses to cancel the extended permissions. So I need to doublecheck this.

like image 765
Jareish Avatar asked Aug 01 '12 08:08

Jareish


2 Answers

You could use _.difference to see if removing the given permissions from your required permissions leaves anything behind:

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

A nice side effect of this is that you get the missing permissions in diff in case you want to tell them what's wrong.

like image 129
mu is too short Avatar answered Sep 21 '22 11:09

mu is too short


How about this?

_.all(needed_permissions, function(v){
    return _.include(given_permissions, v);
});
like image 25
xiaowl Avatar answered Sep 19 '22 11:09

xiaowl