Javascript 如果键与下划线.js匹配,则比较两个数组

Javascript 如果键与下划线.js匹配,则比较两个数组,javascript,underscore.js,Javascript,Underscore.js,我有一个从Facebook获得权限的数组和一个用户应该授予的权限数组: window.FB.api('/me/permissions', function(perm){ if(perm){ var given_permissions = _.keys(perm['data'][0]; var needed_permissions = ["publish_stream", "email"]; //now

我有一个从Facebook获得权限的数组和一个用户应该授予的权限数组:

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
    }
}
现在,我想比较一下所有
所需的\u权限
是否都在
给定的\u权限
,比较方式是使用下划线(而不是自己循环两个数组并比较值)。我看到了一个
.include
方法,但它将数组与值进行比较。如果所有权限都可用,我想返回true,否则返回false。如果可能的话,我在找一个不错的单线电话

原因是,即使用户选择取消扩展权限,
FB.login
也会返回true。所以我需要再次检查这个。

这个怎么样

_.all(needed_permissions, function(v){
    return _.include(given_permissions, v);
});
您可以使用查看从所需权限中删除给定权限是否会留下任何内容:

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

这样做的一个很好的副作用是,您可以在
diff
中获得缺少的权限,以防您想告诉他们出了什么问题。

迟来回答,但这对我来说很有效:
.isEqual(给定权限,需要权限)

这也是一个很好的解决方案。我必须将另一个标记为答案,因为这基本上是我要求的,但我认为我会使用此解决方案,以便提供更好的反馈。我不同意,并认为将此作为您接受的答案会更有用。差异正是您所要求的(“如果键与下划线.js匹配,则比较两个数组”-我认为其余的都是猜测),并且确实是您“接受”的答案,因为您使用了它!只是想帮助其他人看看这个。我想不是每个人都会通过接受的答案。作为一个解决方案,被接受的答案是相当糟糕的,因为当下划线提供一个函数来完成“开箱即用”时,它不会添加任何内容。