使用Underscorejs,如何查找数组是否包含另一个数组?

22 javascript underscore.js

我有这个

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

这将返回具有apple标签的书签对象

我想在那里放一个数组来拉和所有具有匹配值的书签,类似于此

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

这不起作用,任何方式让它工作?

编辑:对不起,书签是一个集合,我试图返回具有苹果和橙色标签的模型

epa*_*llo 26

如果tags是一个字符串,那么它就是你的代码

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

indexOf示例:jsFiddle

如果tags是数组,则可以使用intersection

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

有交集的例子:jsFiddle


pim*_*vdb 5

在下划线中似乎没有这个功能.但是,您可以轻松地组合其他功能来完成此任务:

_.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);
    });
  }
});
Run Code Online (Sandbox Code Playgroud)