如何使用自定义输入作为过滤器过滤对象数组



使用多重选择下拉菜单,我有一个对象数组,我想根据用户输入过滤掉它,比如

[{
"ServiceArea": "NON-CIO",
"ManagingDirector": "qwe",
"Lead": "abc",
"Manager": "xyz"
"id":"1",
"Designation":"COO"
},
{
"ServiceArea": "NON-CIO",
"ManagingDirector": "dfg",
"Lead": "hgf",
"Manager": "lkj"
"id":"2",
"Designation":"CTO"
},
{
"ServiceArea": "NON-CIO",
"ManagingDirector": "out",
"Lead": "poi",
"Manager": "uyt",
"id":"43",
"Designation":"COO"
},
{
"ServiceArea": "4500-CIO",
"ManagingDirector": "yhh",
"Lead": "trr",
"Manager": "nbb"
"id":"403",
"Designation":"CTO"
}
]

自定义用户第一次输入-

ServiceArea = ["NON-CIO"]

我应该得到前三个记录。第二次用户输入

ManagingDirector = ["dgf","qwe"]

这里我应该得到前两个记录。我正在使用这个函数,但它似乎是附加数组而不是替换。

//airData is main array
array.forEach((item)=>{
var name = this.airData.filter( el=>el.ManagingDirector == item );
this.airData.push.apply(this.finalArr,name);
});

假设filters对象如下

const data = [{ServiceArea:"NON-CIO",ManagingDirector:"qwe",Lead:"abc",Manager:"xyz"},{ServiceArea:"NON-CIO",ManagingDirector:"dfg",Lead:"hgf",Manager:"lkj"},{ServiceArea:"NON-CIO",ManagingDirector:"qwe",Lead:"poi",Manager:"uyt"},{ServiceArea:"4500-CIO",ManagingDirector:"yhh",Lead:"trr",Manager:"nbb"}];
const filters = {
ServiceArea: ["NON-CIO"],
ManagingDirector: ["dgf", "qwe"],
Manager: []
}
const result = data.filter(e =>
Object.entries(filters).every(([key, vals]) =>
vals.length === 0 || vals.includes(e[key])))
console.log(result)

最新更新