我目前正在尝试根据子对象过滤对象数组。该对象的结构如下:
{
name: 'foo',
status: 'fail',
rules: [
{
name: 'bar',
result: 'fail'
},
// so on and so forth ~13 rules
]
}
我想将结果过滤到rule a
status: fail
,rule b
status: pass
等所有对象。
到目前为止,这就是我所拥有的:
这适用于一个且只有一个参数:
var data = _.filter(this.resultsCollection.toJSON(), function(obj) {
return _.some(obj.rules, {name:params.rules[0].name});
});
对我来说,这应该有效,而且更符合我的要求,因为_.some
只需要一个参数,但不会(只需将其更改为_.where
):
var data = _.filter(this.resultsCollection.toJSON(), function(obj) {
return _.where(obj.rules, {name:params.rules[0].name});
});
我真想要的更像是这样:
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'});
答案 0 :(得分:0)
使用vanilla 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;
});