22

我有这个

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

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

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

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

这不工作,有什么办法让它工作?

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

4

2 回答 2

26

如果标签是一个字符串,你的代码就是

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

indexOf 示例:jsFiddle

如果标签是一个数组,你可以使用交集

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

交集示例:jsFiddle

于 2013-01-08T18:33:51.653 回答
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);
    });
  }
});
于 2013-01-08T18:34:04.937 回答