2012-08-01 45 views
7

Tôi có một mảng với các điều khoản từ Facebook và một mảng của các điều khoản mà người dùng shouldve đưa ra:so sánh hai mảng nếu phím phù hợp với 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 
    } 
} 

Bây giờ tôi muốn so sánh nếu tất cả các needed_permissions là trong given_permissions, theo cách hiểu biết sâu sắc (không lặp lại hai mảng và so sánh các giá trị). Tôi đã thấy một phương pháp _.include, nhưng điều này so sánh một mảng với một giá trị. Tôi muốn trả về true nếu tất cả các điều khoản có sẵn và một sai khác. Tôi đã tìm kiếm một cuộc gọi đường dây tốt đẹp nếu có thể.

Lý do cho điều này là, FB.login trả về true ngay cả khi người dùng chọn hủy các quyền mở rộng. Vì vậy, tôi cần phải kiểm tra lại điều này.

Trả lời

4

Làm thế nào về điều này?

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

Bạn có thể sử dụng _.difference để xem nếu loại bỏ các điều khoản đưa ra từ quyền đòi hỏi quý vị rời khỏi bất cứ điều gì đằng sau:

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

Một tác dụng phụ tốt đẹp của việc này là bạn sẽ có được điều khoản còn thiếu trong diff trong trường hợp bạn muốn nói với họ điều gì sai.

+0

Đó cũng là một giải pháp tốt đẹp. Tôi sẽ phải đánh dấu câu trả lời khác là câu trả lời, bởi vì đó là những gì tôi yêu cầu, nhưng tôi nghĩ tôi sẽ sử dụng giải pháp này để tôi có thể cung cấp phản hồi tốt hơn. – Jareish

+0

Tôi không đồng ý và nghĩ rằng sẽ hữu ích hơn nếu bạn làm cho câu trả lời này được chấp nhận. _ififference là chính xác những gì bạn yêu cầu ("so sánh hai mảng nếu các phím phù hợp với underscore.js" - phần còn lại đã thực sự suy đoán tôi nghĩ) và thực sự là câu trả lời bạn "chấp nhận" bởi vì bạn đã sử dụng nó! Chỉ là một ý nghĩ để giúp những người khác nhìn vào điều này. Tôi đoán không phải ai cũng sẽ kiểm tra câu trả lời được chấp nhận. Câu trả lời được chấp nhận là khá nghèo như một giải pháp vì nó không thêm gì khi gạch dưới cung cấp một chức năng để làm chính xác rằng "ra khỏi hộp". – SuperDuperApps

0

Trả lời muộn nhưng điều này phù hợp với tôi: _.isEqual(given_permissions, needed_permissions);

Các vấn đề liên quan