[英]How to filter arrays with multiple conditions in javascript?
所以我的示例數組如下,
{
"available": [
{
"AC": "false",
"availableSeats": "18",
"avlWindowSeats": "10",
"bookable": "true",
"nonAC": "true",
"seater": "false",
"sleeper": "true",
"zeroCancellationTime": "0",
"mTicketEnabled": "true"
},
{
"AC": "false",
"availableSeats": "18",
"avlWindowSeats": "10",
"bookable": "true",
"nonAC": "true",
"seater": "true",
"sleeper": "true",
"zeroCancellationTime": "0",
"mTicketEnabled": "true"
},
....
]
}
我的過濾數據如下,
var filters = {
nonAC: [
"true"
],
seater: [
"true"
],
sleeper: [
"true"
],
};
我創建了一個查詢構建器,它有助於完成查詢!
buildFilter = (filter) => {
let query = {};
for (let keys in filter) {
if ( (filter[keys].constructor === Object) || (filter[keys].constructor === Array && filter[keys].length > 0)) {
query[keys] = filter[keys];
}
}
return query;
};
最后我的過濾功能如下,
filterData = (data, query) => {
const filteredData = data.filter( (item) => {
for (let key in query) {
if (item[key] === undefined || !query[key].includes(item[key])) {
return false;
}
}
return true;
});
return filteredData;
};
如果您注意到我的過濾條件,它會說
seater: [
"true"
],
sleeper: [
"true"
],
這顯然意味着如果座位和卧鋪是真的那么過濾它,但問題是我需要結果為“座位或卧鋪”所以,如果任何一個是真的,它應該過濾那個,
那么如何更改我接受作為座椅或卧鋪的過濾器功能。
結果應該給兩個數組作為結果而不是第二個單獨作為輸出!
如果filters
器之一為true
您可以獲取filters
和過濾器的條目。
const available = [{ AC: "false", availableSeats: "18", avlWindowSeats: "10", bookable: "true", nonAC: "true", seater: "false", sleeper: "true", zeroCancellationTime: "0", mTicketEnabled: "true" }, { AC: "false", availableSeats: "18", avlWindowSeats: "10", bookable: "true", nonAC: "true", seater: "true", sleeper: "true", zeroCancellationTime: "0", mTicketEnabled: "true" }], filters = { nonAC: ["true"], seater: ["true"], sleeper: ["true"] }, filterEntries = Object.entries(filters), result = available.filter(object => filterEntries.some(([key, values]) => values.includes(object[key])) ); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.