簡體   English   中英

從json多條件過濾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM