Подтвердить что ты не робот

С Underscorejs, как определить, содержит ли массив другой массив?

У меня есть это

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

Что вернет объекты закладки, имеющие теги apple

Я хочу поместить туда массив, чтобы вытащить, и все закладки, имеющие соответствующие значения, похожие на это

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

Это не работает, чтобы заставить его работать?

EDIT: Im sorry, закладки - это коллекция, и я пытаюсь вернуть модели с яблочными и оранжевыми тегами

4b9b3361

Ответ 1

Если теги являются строкой, ваш код будет

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

Пример с indexOf: jsFiddle

Если тегами являются массивы, вы можете использовать пересечение

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

Пример с пересечением: jsFiddle

Ответ 2

Кажется, что функция не подходит для подчеркивания. Однако вы можете легко комбинировать другие функции, чтобы выполнить это:

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