2012-08-01 42 views
7

我與來自Facebook和權限的數組權限的陣列,用戶shouldve給出匹配:比較兩個數組,如果鍵與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 
    } 
} 

現在我想比較,如果所有的needed_permissions是在given_permissions中,以下劃線精明的方式(無需循環兩個數組我自己和比較值)。我看到了一個_.include方法,但是它將一個數組與一個值進行比較。如果所有的權限都可用,我想返回true,否則返回false。如果可能的話,我正在尋找一個很好的單線電話。

原因是,即使用戶選擇取消擴展權限,FB.login也會返回true。所以我需要重新檢查一下。

回答

4

這個怎麼樣?

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

你可以使用_.difference,看看您移除所需的權限給定的權限留下任何東西:

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

這方面的一個很好的副作用是,你的情況下,得到缺少權限diff你想告訴他們什麼是錯的。

+0

這也是一個不錯的解決方案。我必須將另一個標記爲答案,因爲這基本上是我所要求的,但我想我會使用此解決方案,以便我可以提供更好的反饋。 – Jareish 2012-08-01 08:54:08

+0

我不同意,並認爲將此作爲您接受的答案會更有用。 _.difference正是你所要求的(「如果key與underscore.js匹配,比較兩個數組」 - 其餘的確實是我猜想的猜測),並且事實上你接受的答案是因爲你使用了它!只是想幫助別人看這個。我想不是每個人都會檢查過去接受的答案。被接受的答案作爲一種解決方案很差,因爲下劃線提供了一個功能來完成「開箱即用」的功能。 – SuperDuperApps 2016-04-14 16:30:51

0

最後回答,但這適用於我:_.isEqual(given_permissions, needed_permissions);