2013-01-08 16 views
21

mam toW programie Underscorejs, jak sprawdzić, czy tablica zawiera inną tablicę?

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

która zwróci przedmiotów zakładek, które mają znaczniki jabłko

chcę umieścić tam tablicę zamiast ciągnąć i wszystkie zakładki, które mają wartości dopasowania, podobny do tego

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

To nie działa, jakikolwiek sposób, aby to zadziałało?

EDIT: Przepraszam, zakładki jest zbieranie i im próbuje powrócić do modeli posiadających jabłko i pomarańcza tagów

+0

Niepowiązane ... dlaczego miksujemy metody podkreślenia i rodzimej macierzy? 'Array.filter' i' _.contains'. Nie powinieneś używać '_.filter'? –

+0

@JosephSilber Ahh, nie wiedziałem o '_()', nie użyłem jeszcze podkreślenia, ale tytuł –

+0

Tytuł nie ma dla mnie żadnego znaczenia – glyph

Odpowiedz

25

Jeśli znaczniki jest ciągiem znaków, kod byłoby

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

Przykład z indexOf: jsFiddle

przypadku znaczników jest tablicą, można wykorzystać punkt przecięcia

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

Przykład z przecięcia: jsFiddle

+0

Cześć, proszę spojrzeć na edycję, zapomniałem trochę szczegółów. Przepraszam. –

+0

Więc "tagi" to tablica? – epascarello

+0

Tak znaczniki to tablica, a ja próbuję zwrócić obiekty, które mają wartości z tej tablicy –

5

Nie wydaje się, że funkcja podkreślenia. Można jednak łatwo łączyć inne funkcje, aby to osiągnąć:

_.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

Cześć, proszę spojrzeć na edycję, zapomniałem trochę szczegółów. Przepraszam. –

Powiązane problemy