web-dev-qa-db-fra.com

Avec Underscorejs, comment savoir si un tableau contient un autre tableau?

J'ai ceci

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

Qui renverra les objets de signet qui ont les balises Apple

Je veux mettre un tableau à la place pour tirer et tous les signets qui ont les valeurs correspondantes, similaires à ceci

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

Cela ne fonctionne pas, aucun moyen de le faire fonctionner?

EDIT: Je suis désolé, les signets sont une collection et j'essaie de renvoyer les modèles qui ont le Apple et les balises orange

22
user240993

Si les balises sont une chaîne, votre code serait

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

Exemple avec indexOf: jsFiddle

Si les balises sont un tableau, vous pouvez utiliser l'intersection

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

Exemple avec intersection: jsFiddle

26
epascarello

Il ne semble pas y avoir de fonction pour cela dans le soulignement. Cependant, vous pouvez facilement combiner d'autres fonctions pour y parvenir:

_.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);
    });
  }
});
5
pimvdb