Javascript 下划线findWhere函数以查找元素匹配条件a或b

Javascript 下划线findWhere函数以查找元素匹配条件a或b,javascript,underscore.js,Javascript,Underscore.js,我有一个对象数组 var arr = [{a:1},{a:5}, {a:6},{a:11}]; 我想使用下划线查找where函数来检索满足条件的对象a=1或a=11 如: _findWhere(arr, {a:1} || {a:11}) 像这样的任何事情都是可能的???您可以使用 var arr=[{a:1},{a:5},{a:6},{a:11},{a:11}], found=函数(数组){ var指数; 返回arr.some(函数(a,i){ 如果(a.a==1 | | a.a==11)

我有一个对象数组

var arr = [{a:1},{a:5}, {a:6},{a:11}];
我想使用下划线查找where函数来检索满足条件的对象
a=1
a=11

如:

_findWhere(arr, {a:1} || {a:11})

像这样的任何事情都是可能的???

您可以使用

var arr=[{a:1},{a:5},{a:6},{a:11},{a:11}],
found=函数(数组){
var指数;
返回arr.some(函数(a,i){
如果(a.a==1 | | a.a==11){
指数=i;
返回true;
}
})&&数组[索引]| |未定义;
}(arr);

document.write(“”+JSON.stringify(found,0,4)+’)对于您的案例,最好使用
查找功能。您可以使用作为第二个参数传递给
find
方法的函数,并检查两个条件:
var-arr=[{a:1},{a:5},{a:6},{a:11}];
var elem=u.find(arr,函数(e){
返回e.a==1 | e.a==11;
});
document.write(JSON.stringify(elem))
的行为类似于findWhere,因为它返回通过搜索条件的第一个项目。使用find,可以使用谓词指定搜索条件

var arr = [{a:1}, {a:5}, {a:6}, {a:11}];
_.filter(arr,function(n){return (n.a===1 || n.a===11)});

您可以为此使用0.filter

var arr = [{a:1}, {a:5}, {a:6}, {a:11}];
_.mixin({
   or: function(obj,arr,condition){
     return _.chain(arr).where(condition).union(obj).value();
   }
});

_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{a:2}).value();//returns 2 objects
_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{a:5}).value();//returns 3 objects
_.chain(arr).where({a:1}).or(arr,{a:11}).value();//returns 2 objects

var arr2 = [{a:1,b:4}, {a:5}, {a:6}, {a:11}];
_.chain(arr2).where({a:1}).or(arr2,{a:11}).value();//returns 2 objects
但是有一个更好的解决方案可以帮助您添加任意数量的内容。使用u.mixin,您可以创建自己的或函数


查找
!=<代码>过滤器
Nina您的结果仍然是一个数组,但它必须是第一个通过真值测试的元素。@isvforall,我现在明白了。findWhere不接受函数。如果您更改arr,使第一个对象类似于{a:77},那么这将由第一个代码段返回。
var arr = [{a:1}, {a:5}, {a:6}, {a:11}];
_.mixin({
   or: function(obj,arr,condition){
     return _.chain(arr).where(condition).union(obj).value();
   }
});

_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{a:2}).value();//returns 2 objects
_.chain(arr).where({a:1}).or(arr,{a:11}).or(arr,{a:5}).value();//returns 3 objects
_.chain(arr).where({a:1}).or(arr,{a:11}).value();//returns 2 objects

var arr2 = [{a:1,b:4}, {a:5}, {a:6}, {a:11}];
_.chain(arr2).where({a:1}).or(arr2,{a:11}).value();//returns 2 objects