Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用多个筛选值筛选对象_Javascript_Reactjs - Fatal编程技术网

Javascript 使用多个筛选值筛选对象

Javascript 使用多个筛选值筛选对象,javascript,reactjs,Javascript,Reactjs,我有一个对象,它有三个不同的数组,比如location vertical和roundType,我将得到一个filter对象,该对象中有相同的三个数组。这是需要过滤的数据 testObject = [{ "id": 1892928, "vertical_tax": [ 678, 664 ], "location_tax": [ 666 ], "roundType": [ "rt1" ], } {

我有一个对象,它有三个不同的数组,比如location vertical和roundType,我将得到一个filter对象,该对象中有相同的三个数组。这是需要过滤的数据

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]
   }
最初的要求是:获取任何一个过滤器对象数组中具有特定值的对象。这可以通过使用“some”来实现。
更新要求:所以我需要用filterObject中传递的值过滤主对象。所以filterObject中的所有条件都应该匹配。应返回所有匹配的ID。这可以通过“每一个”来完成。您可以对对象进行筛选,然后将其排除。我已经注释掉了部分比较,因为不清楚是否要对这些属性进行过滤,以及如何过滤。你只提到了地点。如果希望它包含所有属性的所有匹配结果,请将
&&
更改为
| |

如前所述,如果属性匹配(或具有一致的命名),代码可以简化和通用化

filterObject
根据存在的任何匹配项进行筛选。
过滤器对象1
要求在
垂直部分中存在所有元素,并且在其他属性中存在任何匹配项

testObject=[{
“id”:1892928,
“垂直税”:[
678,
664
],
“地点税”:[
666
],
“圆形”:[
“rt1”
],
},
{
“id”:1892927,
“垂直税”:[
662,
663
],
“地点税”:[
663
],
“圆形”:[
“rt2”
],
}]
过滤器对象={
地点:[66666 7],
圆形类型:[“rt1”、“rt2”],
垂直方向:[662661]
};
常量filterObject=(filterObject,testObject)=>{
返回testObject.filter(obj=>
obj.location\u tax&&obj.location\u tax.some(
x=>filterObject.locations&&filterObject.locations.includes(x))||
obj.roundType&&obj.roundType.some(
x=>filterObject.roundTypes&&filterObject.roundTypes.includes(x))||
obj.垂直税和obj.垂直税(
x=>filterObject.verticals&&filterObject.verticals.includes(x))
);
};
log(filterObject(filterObject,testObject));
过滤器对象={
圆形类型:[“rt1”、“rt2”],
垂直方向:[662661]
};
log(filterObject(filterObject,testObject));
//要求使用.every在filterObject.verticals中显示所有对象
常量filterObject s1=(filterObject,testObject)=>{
返回testObject.filter(obj=>
(obj.location\u tax和&obj.location\u tax.some(
x=>filterObject.locations&&filterObject.locations.includes(x))||
obj.roundType&&obj.roundType.some(
x=>filterObject.roundTypes&&filterObject.roundTypes.includes(x))
) &&
filterObject.verticals.every(x=>obj.vertical\u tax&&obj.vertical\u tax.包括(x))
);
};
过滤器对象={
圆形类型:[“rt1”、“rt2”],
垂直方向:[662663]
};
删除testObject[0]。垂直税;

log(filterObject 1(filterObject,testObject))如果您只想测试一个条件,只需使用该语句并放弃其余的条件,或者如果您想使任一条件为true以获得结果,则将必要语句的&&逻辑更改为| |

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]);
});

你能重新组织这个问题吗?所以我需要用filterObject中传递的值过滤主对象。因此,如果filterobject有location:[66666 7],那么在主对象中,所有在其位置数组中包含666的ID都应该返回。这将更简单的是匹配的属性。对于所有三个属性,如位置、垂直和圆形,都是这样。还有一个问题,如果属性之一没有值filterObject={locations:[66666 7],roundTypes:[],verticals:[662661]},该怎么办;包含或,或者它们需要匹配所有属性?对于没有值的属性,将需要添加一个检查以确保该属性已定义,或者取决于您希望它的行为方式。如果它为null或未定义,您希望它根本不过滤它,或者什么?需要至少匹配一个属性。。。。如何添加该检查,因为获取未定义的错误我已经更新了代码,您将看到我为每个filterObject属性添加了一个检查。我没有为testObject添加检查,但它也一样,好吧,还有一个问题,如果结果需要662和663才能出现,该怎么办。基本上,所有的属性都需要匹配,这适用于所有三个属性,如位置、垂直和圆形。还有一个问题,如果属性之一没有值filterObject={locations:[66666 7],roundTypes:[],verticals:[662661]},该怎么办;比较语句将跳过这一步,因为没有可比较的内容,如果缺少值,则不会有任何错误