С 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, закладки - это коллекция, и я пытаюсь вернуть модели с яблочными и оранжевыми тегами
Ответы
Ответ 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);
});
}
});