[英]How to Multi-Filter an Array in Javascript with multiple Conditions from Object?
[英]filter from json multi conditions
我正在嘗試使用 js 通過復選框創建過濾器。 從 JSON 中獲取數據,這是示例
[
{
"id": 111,
"name": "Standart Room",
"img": "rooms_img_1.jpg",
"price": 126,
"category": "single",
"roomType": "room",
"adults": 1,
"children": 0,
"bed": "King",
"facilities": "Closet with hangers, HD flat-screen TV, Telephone",
"area": 20,
"breakfast": false,
"reservedFrom": "2020-02-07T23:28:56.782Z",
"reservedTo": "2020-02-09T23:28:56.782Z"
},
{
"id": 112,
"name": "Standart Room",
"img": "rooms_img_1.jpg",
"price": 126,
"category": "single",
"roomType": "room",
"adults": 1,
"children": 0,
"bed": "King",
"facilities": "Closet with hangers, HD flat-screen TV, Telephone",
"area": 20,
"breakfast": false,
"reservedFrom": "2020-02-01T23:28:56.782Z",
"reservedTo": "2020-02-05T23:28:56.782Z"
},
{
"id": 313,
"name": "Double Room",
"img": "rooms_img_3.jpg",
"price": 320,
"category": "double",
"roomType": "room",
"adults": 2,
"children": 1,
"bed": "Twin",
"facilities": "Closet with hangers, HD flat-screen TV, Telephone",
"area": 20,
"breakfast": false,
"reservedFrom": "2020-03-07T23:28:56.782Z",
"reservedTo": "2020-03-091T23:28:56.782Z"
},
{
"id": 314,
"name": "Double Room",
"img": "rooms_img_4.jpg",
"price": 320,
"category": "double",
"roomType": "room",
"adults": 2,
"children": 0,
"bed": "Twin",
"facilities": "Closet with hangers, HD flat-screen TV, Telephone",
"area": 20,
"breakfast": false,
"reservedFrom": "2020-03-07T23:28:56.782Z",
"reservedTo": "2020-03-091T23:28:56.782Z"
}
]
按可用日期和容量過濾它並放入一個新的可用房間數組
但是當嘗試更多條件時,就像所有可用的大床、特大床和兩張單人床一樣,它不起作用。
if (isBreakfastRequired && !room.breakfast) return false; if (suiteType == true && room.roomType != "suite" || roomType == true && room.roomType != "room" || suitesAndRooms == true && room.roomType != "suite" && room.roomType != "room") return false; if (room.bed == "King" && !kingBed || room.bed == "Queen" && !queenBed || room.bed == "Twin" && !twinBed && (kingBed || queenBed || twinBed) || kingBed == true && twinBed == true && (room.bed == "King" || room.bed == "Twin") || kingBed == true && queenBed == true && (room.bed == "King" || room.bed == "Queen") || twinBed == true && queenBed == true && (room.bed == "Twin" || room.bed == "Queen") ) return false; return true; });
我想這應該是一個更好的解決方案。
試試這個來檢查 kingBed 或 QueenBed 或 twinBed :
if (kingBed == true && queenBed == false && twinBed == false) {
avaliableRooms = avaliableRooms.filter(room => room.bed == "King");
}
else if (kingBed == true && queenBed == true && twinBed == false) {
avaliableRooms = avaliableRooms.filter(room => room.bed == "Queen" || room.bed == "King");
}
else if (kingBed == true && queenBed == true && twinBed == true) {
avaliableRooms = avaliableRooms.filter(room => room.bed == "Twin" || room.bed == "Queen" || room.bed == "King");
}
刪除else if
's - 將其替換為if
s:
if(hasBreakfast == true) {
avaliableRooms = avaliableRooms.filter(room => room.breakfast == true);
}
if(suiteType == true) {
avaliableRooms = avaliableRooms.filter(room => room.roomType == "suite");
}
if(roomType == true) {
avaliableRooms = avaliableRooms.filter(room => room.roomType == "room");
}
if(suitesAndRooms == true) {
avaliableRooms = avaliableRooms.filter(room => room.roomType == "suite" || room.roomType == "room");
}
if(kingBed == true) {
avaliableRooms = avaliableRooms.filter(room => room.bed == "King");
}
if(queenBed == true) {
avaliableRooms = avaliableRooms.filter(room => room.bed == "Queen");
}
if(twinBed == true) {
avaliableRooms = avaliableRooms.filter(room => room.bed == "Twin");
}
由此解決
if(isBreakfastRequired && !room.breakfast)
return false;
if(suiteType == true && room.roomType != "suite" ||
roomType == true && room.roomType != "room" ||
suitesAndRooms == true && room.roomType != "suite" && room.roomType != "room")
return false;
if(room.bed == "King" && !kingBed ||
room.bed == "Queen" && !queenBed ||
room.bed == "Twin" && !twinBed )
if((room.bed == "King" && !kingBed || room.bed == "Queen" && !queenBed || room.bed == "Twin" && !twinBed) && (kingBed || queenBed || twinBed))
return false;
return true;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.