滤波器内存在多个中频条件



我想过滤一个表(2d数组(和IF条件(取决于HTML选择值(,并使用以下代码

transportRegFiltered = transportReg.filter(r => 
{if(lugarDe.value == "TODOS"){return true} else {return (r[6] == lugarDe.value)}    
})

有一个条件就可以了,但我需要几个。Smth样

transportRegFiltered = transportReg.filter(r => 
{if(lugarDe.value == "TODOS"){return true} else {return (r[6] == lugarDe.value)} 
if(lugarA.value == "TODOS"){return true} else {return (r[7] == lugarA.value)}
}

我该怎么做?

您可以使用OR运算符返回所有条件。因为

if(A) { return true; } else { return B; }
if(C) { return true; } else { return D; }

转换为

return A || B || C || D;

所以你可以在过滤器里面写这样的东西,

return ( lugarDe.value == "TODOS" || r[6] == lugarDe.value || lugarA.value == "TODOS" || r[7] == lugarA.value ... and all the other conditions );

我真的不清楚你希望if语句到底做什么,但一个尝试是检查值,然后用OR检查其他条件。

var isTodos = [lugarDe.value, lugarA.value].includes("TODOS");
return isTodos || r[6] == lugarDe.value || r[7] == lugarA.value;

如果满足每个过滤器的条件,您是否尝试独立应用该过滤器?在这种情况下,您可以级联过滤器:

transportRegFiltered = transportReg
.filter((r) => {
if (lugarDe.value == "TODOS") {
return true;
} else {
return r[6] == lugarDe.value;
}
})
.filter((r) => {
if (lugarA.value == "TODOS") {
return true;
} else {
return r[7] == lugarA.value;
}
});

您可以使用一个数组来检查值。

transportRegFiltered = transportReg.filter(r => {
const values = [lugarDe.value, lugarA.value];
return values.includes("TODOS") || values.some((v, i) => v === r[i + 6]);
});

好吧,我用最简单直接的方式做到了。只是想找个好看的。。。我只是循环浏览了3个输入的所有选项,并为每个组合分配了不同的过滤器,包括或不包括相关的过滤器条件

var transportRegFiltered;    
if(lugarDe.value == "TODOS" && lugarA.value == "TODOS" && lotIdSearch.value.length == 0){
transportRegFiltered = transportReg} 

else if (lugarDe.value == "TODOS" && lugarA.value == "TODOS" && lotIdSearch.value.length > 0) {
transportRegFiltered = transportReg.filter(r => (r[5]).toString().toLowerCase().startsWith(lotIdSearchValue))}

else if (lugarDe.value !== "TODOS" && lugarA.value == "TODOS" && lotIdSearch.value.length == 0) {
transportRegFiltered = transportReg.filter(r => r[6] == lugarDe.value)}

else if (lugarDe.value == "TODOS" && lugarA.value !== "TODOS" && lotIdSearch.value.length == 0) {
transportRegFiltered = transportReg.filter(r => r[7] == lugarA.value)}

else if (lugarDe.value !== "TODOS" && lugarA.value !== "TODOS" && lotIdSearch.value.length == 0) {
transportRegFiltered = transportReg.filter(r => r[6] == lugarDe.value && r[7] == lugarA.value)}

else if (lugarDe.value !== "TODOS" && lugarA.value == "TODOS" && lotIdSearch.value.length > 0) {
transportRegFiltered = transportReg.filter(r => r[6] == lugarDe.value && (r[5]).toString().toLowerCase().startsWith(lotIdSearchValue))}

else if (lugarDe.value == "TODOS" && lugarA.value !== "TODOS" && lotIdSearch.value.length > 0) {
transportRegFiltered = transportReg.filter(r => r[7] == lugarA.value && (r[5]).toString().toLowerCase().startsWith(lotIdSearchValue))}

else if (lugarDe.value !== "TODOS" && lugarA.value !== "TODOS" && lotIdSearch.value.length > 0) {
transportRegFiltered = transportReg.filter(r => r[6] == lugarDe.value && r[7] == lugarA.value && (r[5]).toString().toLowerCase().startsWith(lotIdSearchValue))}

最新更新