2013-01-08 12 views
21

Tôi có điều nàyVới Underscorejs, làm thế nào để tìm xem một mảng có chứa mảng khác không?

var matches = bookmarks.filter(function(x) { 
    return _.contains(x.get("tags"), 'apple'); 
}); 

nào sẽ trở lại các đối tượng bookmark có các thẻ táo

Tôi muốn đặt một mảng có thay vì để kéo và tất cả các dấu trang có giá trị khớp lệnh, tương tự như sau

var matches = bookmarks.filter(function(x) { 
    return _.contains(x.get("tags"), ['apple','orange']); 
}); 

Điều này không có tác dụng, cách nào để hoạt động?

EDIT: Im xin lỗi, đánh dấu là một bộ sưu tập và im cố gắng để trở lại các mô hình có quả táo và các thẻ cam

+0

Không liên quan ... tại sao bạn trộn các phương pháp xử lý mảng gốc và lõi? 'Array.filter' và' _.contains'. Bạn không nên sử dụng '_.filter'? –

+0

@JosephSilber Ahh, tôi không biết về '_()', tôi chưa thực sự sử dụng dấu gạch dưới nhưng mặc dù –

+0

Tiêu đề không có ý nghĩa với tôi – glyph

Trả lời

25

Nếu thẻ là một chuỗi, mã của bạn nó sẽ là

return _.indexOf(x.get("tags"), ['apple','orange']) > -1; 

Ví dụ với indexOf: jsFiddle

Nếu thẻ là một mảng, bạn có thể sử dụng giao

return _.intersection(['apple','orange'], x.get("tags")).length > 0; 

Ví dụ với giao lộ: jsFiddle

+0

Xin vui lòng xem xét sửa, tôi quên một số chi tiết. Lấy làm tiếc. –

+0

Vì vậy, "thẻ" là một mảng? – epascarello

+0

Có thẻ là một mảng và cố gắng trả về các đối tượng có giá trị từ mảng đó –

5

Có vẻ như không phải là một chức năng cho rằng trong dấu gạch dưới. Tuy nhiên, bạn có thể dễ dàng kết hợp các chức năng khác để thực hiện việc này:

_.mixin({ 
    containsAny: function(arr, values) { 
    // at least one (.some) of the values should be in the array (.contains) 
    return _.some(values, function(value) { 
     return _.contains(arr, value); 
    }); 
    } 
}); 
+0

Xin vui lòng xem xét chỉnh sửa, tôi đã quên một số chi tiết. Lấy làm tiếc. –