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

时间:2013-01-08 18:30:09

标签: javascript underscore.js

我有这个

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']);
});

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

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

2 个答案:

答案 0 :(得分:26)

如果标签是字符串,那么您的代码就是

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

indexOf示例:jsFiddle

如果标签是数组,则可以使用交叉点

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

交叉示例:jsFiddle

答案 1 :(得分: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);
    });
  }
});