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)