Javascript 下划线where过滤器

Javascript 下划线where过滤器,javascript,underscore.js,Javascript,Underscore.js,我试图使用下划线的where来过滤对象数组,但我似乎不知道如何让它为同一个键过滤多个值。例如: var itemsArr = [{name:"foo", color:"red"}, {name:"bar", color:"blue"}, {name:"bob", color:"yellow"}]; 我试图让它返回一个数组,其中包含所有颜色为红色的项目和所有颜色为蓝色的项目。。。这可能吗?我试过了 tempArr = _.where(itemsArr, {color:["red", "blue"

我试图使用下划线的
where
来过滤对象数组,但我似乎不知道如何让它为同一个键过滤多个值。例如:

var itemsArr = [{name:"foo", color:"red"}, {name:"bar", color:"blue"}, {name:"bob", color:"yellow"}];
我试图让它返回一个数组,其中包含所有颜色
为红色的项目和所有颜色
为蓝色的项目。。。这可能吗?我试过了

tempArr = _.where(itemsArr, {color:["red", "blue"]}); 
但那没用。如果我必须使用
\uu.filter
并写出我自己的谓词,我会的,但我只是想知道是否有其他人尝试过这样做并找到了解决方案。

根据:

查看列表中的每个值,返回包含属性中列出的所有键值对的所有值的数组

如果您愿意,您也可以查看。在发动机罩下,
其中
使用
isMatch

_.isMatch = function(object, attrs) {
    var keys = _.keys(attrs), length = keys.length;
    if (object == null) return !length;
    var obj = Object(object);
    for (var i = 0; i < length; i++) {
        var key = keys[i];
        if (attrs[key] !== obj[key] || !(key in obj)) return false;
    }
    return true;
};
\uuu.isMatch=函数(对象,属性){
var keys=u.keys(attrs),length=keys.length;
if(object==null)返回!长度;
var obj=对象(对象);
对于(变量i=0;i

因为不能有两个相同的键,所以不能按自己的意愿操作。正如您所建议的,我将使用
过滤器

您能运行两次“where”并将两个结果数组合并吗

tempArr = _.where(itemsArr, {color: "red"}).concat(_.where(itemsArr, {color: "blue"}));
这是解决办法

 var itemsArr = [{name:"foo", color:"red"}, {name:"bar", color:"blue"}, {name:"bob", color:"red"}];
 var filter = ["red","blue"];
 var data = {};
 _.each(filter, function (item) { 
       data[item] = true; 
   });

 var returnData = _.filter(itemsArr, function (item) {
                    return data[item.color];
                 });

 console.log(returnData)
使用函数:

_.filter(itemsArr,function(itm){return itm.color=='red' || itm.color=='blue'})
使用和组合:

_.filter(itemsArr, function(item, index) {
  return _.contains(["red", "blue"], item.color);
})

非常感谢。这正是我想要的。我如何扩展过滤器以过滤
name
?说
\包含([“红色”、“蓝色”],item.color)
包含([“foo”,“bob”],item.name)?\包含([“红色”、“蓝色”],item.color)&&\包含([“foo”、“bob”],item.name)