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

时间:2016-03-23 17:22:56

标签: javascript underscore.js

我有一个对象数组

var arr = [{a:1},{a:5}, {a:6},{a:11}];

我想使用下划线查找where函数来检索满足条件a = 1a =11

的对象

像:

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

这样的事情有可能吗??

4 个答案:

答案 0 :(得分:7)

find的行为与findWhere相同,它返回传递搜索条件的第一个项目。使用find,您可以使用谓词来指定搜索条件。

var result = _.find(arr, function(item) {
    return item.a == 1 || item.a == 11;
});

答案 1 :(得分:2)

你可以使用_.filter来实现这个

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

但是有一个更好的解决方案可以帮助您添加任意数量或任意数量。使用_.mixin可以创建自己的或函数

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

答案 2 :(得分:1)

您可以使用Array#some

在纯Javascript中编写它



var arr = [{ a: 1 }, { a: 5 }, { a: 6 }, { a: 11 }, { a: 11 }],
    found = function (array) {
        var index;
        return arr.some(function (a, i) {
            if (a.a === 1 || a.a === 11) {
                index = i;
                return true;
            }
        }) && array[index] || undefined;
    }(arr);

document.write('<pre>' + JSON.stringify(found, 0, 4) + '</pre>');
&#13;
&#13;
&#13;

答案 3 :(得分:1)

为了您的情况,最好使用find功能。您可以使用作为find方法的第二个参数传递的函数,并检查您的两个条件:

&#13;
&#13;
var arr = [{ a: 1 }, { a: 5 }, { a: 6 }, { a: 11 }];

var elem = _.find(arr, function(e) {
    return e.a == 1 || e.a == 11;
});

document.write(JSON.stringify(elem));
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
&#13;
&#13;

或使用普通javascript(ES2015):

&#13;
&#13;
var arr = [{ a: 1 }, { a: 5 }, { a: 6 }, { a: 11 }];

var elem = arr.find(function(e) {
    return e.a == 1 || e.a == 11;
});

document.write(JSON.stringify(elem));
&#13;
&#13;
&#13;