Filter 如何使用下划线根据嵌套对象筛选对象数组?

Filter 如何使用下划线根据嵌套对象筛选对象数组?,filter,nested,underscore.js,javascript-objects,Filter,Nested,Underscore.js,Javascript Objects,我目前正在尝试根据子对象筛选对象数组。对象的结构如下所示: { name: 'foo', status: 'fail', rules: [ { name: 'bar', result: 'fail' }, // so on and so forth ~13 rules ] } var data = _.where(this.resultsCollection.toJS

我目前正在尝试根据子对象筛选对象数组。对象的结构如下所示:

{
    name: 'foo',
    status: 'fail',
    rules: [
        {
            name: 'bar',
            result: 'fail'
        },
        // so on and so forth ~13 rules
    ]
}
var data = _.where(this.resultsCollection.toJSON(), {
    rules: params.rules // params.rules being the array with name and result
});
我想将我的结果筛选到所有具有
规则a
状态:失败
规则b和
状态:通过
的对象

到目前为止,我的情况如下:

这仅适用于一个参数:

var data = _.filter(this.resultsCollection.toJSON(), function(obj) {
    return _.some(obj.rules, {name:params.rules[0].name});
});
对我来说,这应该有效,而且更符合我的需要,因为
有些只接受一个参数,但不接受(只是将其更改为
):

实际上,我想要的是更像这样的东西:

{
    name: 'foo',
    status: 'fail',
    rules: [
        {
            name: 'bar',
            result: 'fail'
        },
        // so on and so forth ~13 rules
    ]
}
var data = _.where(this.resultsCollection.toJSON(), {
    rules: params.rules // params.rules being the array with name and result
});
它通过以下方式进行过滤:

var data = _.where(this.resultsCollection.toJSON(), {status:'fail'});

最终使用了香草javascript过滤器

var data = this.resultsCollection.toJSON().filter(function(obj) {
        for (var i = 0; i < params.rules.length; i++) {
            var rule = params.rules[i];
            for (var k = 0; k < obj.rules.length; k++) {
                if(obj.rules[k].name.toLowerCase() == rule.name.toLowerCase()) {
                    if(obj.rules[k].result.toLowerCase() !== rule.result.toLowerCase()) {
                        return false;
                    } else {
                        break;
                    }
                }
                if(i === obj.rules.length - 1) return false;
            }
        }
        return true;
    });
var data=this.resultCollection.toJSON().filter(函数(obj){
对于(变量i=0;i
最终使用了香草javascript过滤器

var data = this.resultsCollection.toJSON().filter(function(obj) {
        for (var i = 0; i < params.rules.length; i++) {
            var rule = params.rules[i];
            for (var k = 0; k < obj.rules.length; k++) {
                if(obj.rules[k].name.toLowerCase() == rule.name.toLowerCase()) {
                    if(obj.rules[k].result.toLowerCase() !== rule.result.toLowerCase()) {
                        return false;
                    } else {
                        break;
                    }
                }
                if(i === obj.rules.length - 1) return false;
            }
        }
        return true;
    });
var data=this.resultCollection.toJSON().filter(函数(obj){
对于(变量i=0;i