使用多个过滤器值过滤对象
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用多个过滤器值过滤对象相关的知识,希望对你有一定的参考价值。
我有一个对象,该对象具有三个不同的数组,例如location Vertical和roundType,我将得到一个过滤器对象,该对象在该对象中具有相同的三个数组。这是需要过滤的数据
testObject = [{
"id": 1892928,
"vertical_tax": [
678,
664
],
"location_tax": [
666
],
"roundType": [
"rt1"
],
}
{
"id": 1892927,
"vertical_tax": [
662,
663
],
"location_tax": [
663
],
"roundType": [
"rt2"
],
}]
这是应该基于其进行过滤的过滤器对象
filterObject = {
locations: [666,667]
roundTypes: ["rt1","rt2"]
verticals: [662,661]
}
所以我需要使用在filterObject中传递的值来过滤主对象。因此,如果filterobject具有location:[666,667],则应该在主对象中返回所有在其location数组中包含666的id。
答案
您可以过滤对象,而只排除它们。我已注释掉部分比较,因为尚不清楚是否要筛选这些属性以及筛选方式。您只提到了位置。如果您希望它包括所有属性的所有匹配结果,请将&&
更改为||
。如前所述,如果属性匹配(或具有一致的命名),则可以简化和泛化代码。
testObject = [{
"id": 1892928,
"vertical_tax": [
678,
664
],
"location_tax": [
666
],
"roundType": [
"rt1"
],
},
{
"id": 1892927,
"vertical_tax": [
662,
663
],
"location_tax": [
663
],
"roundType": [
"rt2"
],
}]
filterObject = {
locations: [666,667],
roundTypes: ["rt1","rt2"],
verticals: [662,661]
};
console.log(
testObject.filter(obj =>
obj.location_tax.some(x=>filterObject.locations && filterObject.locations.includes(x)) ||
obj.roundType.some(x=>filterObject.roundTypes && filterObject.roundTypes.includes(x)) ||
obj.vertical_tax.some(x=>filterObject.verticals && filterObject.verticals.includes(x))
)
filterObject = {
roundTypes: ["rt1","rt2"],
verticals: [662,661]
};
console.log(
testObject.filter(obj =>
obj.location_tax.some(x=>filterObject.locations && filterObject.locations.includes(x)) ||
obj.roundType.some(x=>filterObject.roundTypes && filterObject.roundTypes.includes(x)) ||
obj.vertical_tax.some(x=>filterObject.verticals && filterObject.verticals.includes(x))
)
)
另一答案
如果只想测试一个条件,只需使用该语句并丢弃其余条件,或者如果要使任一条件都为真以获取结果,则将&&逻辑更改为||。以获取必要的说明。
testObject.filter( i => {
return i.vertical_tax.every((value, index) => value === filterObject.verticals[index]) &&
i.location_tax.every((value, index) => value === filterObject.locations[index]) &&
i.roundType.every((value, index) => value === filterObject.roundTypes[index]);
});
以上是关于使用多个过滤器值过滤对象的主要内容,如果未能解决你的问题,请参考以下文章