【问题标题】:compare two arrays if keys match with underscore.js如果键与 underscore.js 匹配,则比较两个数组
【发布时间】:2012-08-01 08:22:39
【问题描述】:

我有一个来自 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
    }
}

现在我想比较是否所有的needed_permissions 都在given_permissions 中,以一种下划线的方式(不用自己循环两个数组并比较值)。我看到了一个_.include 方法,但这会将一个数组与一个值进行比较。如果所有权限都可用,我想返回 true,否则返回 false。如果可能的话,我正在寻找一个不错的单行电话。

这样做的原因是,即使用户选择取消扩展权限,FB.login 也会返回 true。所以我需要仔细检查一下。

【问题讨论】:

    标签: javascript underscore.js


    【解决方案1】:

    您可以使用_.difference 查看从所需权限中删除给定权限是否会留下任何内容:

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

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

    【讨论】:

    • 这也是一个不错的解决方案。我必须将另一个标记为答案,因为这基本上是我要求的,但我想我会使用这个解决方案,以便提供更好的反馈。
    • 我不同意,并认为将其作为您接受的答案会更有用。 _.difference 正是您所要求的(“如果键与 underscore.js 匹配,则比较两个数组”-我认为其余的确实是猜测)并且确实是您“接受”的答案,因为您使用了它!只是想帮助其他人看看这个。我想不是每个人都会检查接受的答案。作为一种解决方案,公认的答案非常糟糕,因为当下划线提供了一个“开箱即用”的功能时,它什么也没增加。
    【解决方案2】:

    这个怎么样?

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

    【讨论】:

      【解决方案3】:

      迟到的答案,但这对我有用:_.isEqual(given_permissions, needed_permissions);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-28
        • 1970-01-01
        • 2017-03-25
        相关资源
        最近更新 更多