2016-10-15 136 views
0

我獲取一個對象從客戶端發送這樣如何避免在單個對象中切換多個條件?

var condition={"bedrooms":"1,2,3,4","Inhibition":"1,6","possession":"3","id":"8",toilets:"1,2",...,} 

所以它必須是相同的密鑰,只在單一對象,但長度可以是1/2/3/4/.. 如下例所示:

var condition={"bedrooms":"1,2,3,4","Inhibition":"1,6"}; 
    var condition={"bedrooms":"1,2,3,4"}; 
    var condition={"Inhibition":"1,6"}; 
    var condition={"id":"1,6"}; 
    var condition={"toilets":"1,6","possession":"3"}; 
var condition={"possession":"3"}; 

這樣的,我有10個鍵 所以基於這樣我得到了不同的情景幾乎100情景我以開關返回不同object.so我怎麼可以處理所有這些情況,如果是其他不正確。

我想這樣

enter image description here 我的代碼是:

function comparison(condition,requestId,dbId){ 
     var obj={}; 
     var andCondition=[]; 
     var subCondition={}; 




switch(true) { 
     case (condition.hasOwnProperty("Inhibition") && !condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("budgetPrice") && !condition.hasOwnProperty("possession")): { 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_property`.`hp_property_inhibition_status_id` IN (" + condition.Inhibition + ")")); 

      obj['$and']=andCondition; 

      return obj; 

     }; 
     break; 
     case (condition.hasOwnProperty("Inhibition") && condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("budgetPrice") && !condition.hasOwnProperty("possession")): { 
      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_property`.`hp_property_inhibition_status_id` IN (" + condition.Inhibition + ")"),Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")")); 

      obj['$and']=andCondition; 

      return obj; 
     } 
     break; 

     case (condition.hasOwnProperty("Inhibition") && condition.hasOwnProperty("bedrooms") && condition.hasOwnProperty("budgetPrice") && !condition.hasOwnProperty("possession")): { 
      var budgetPrice = condition.budgetPrice.split(","); 
      var minRange = budgetPrice[0]; 
      var maxRange = budgetPrice[1]; 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_property`.`hp_property_inhibition_status_id` IN (" + condition.Inhibition + ")"),Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")"),Sequelize.literal("`hp_unit_details.hp_unit_prices`.`price_per_sqft` * `hp_unit_details`.`property_size` BETWEEN " + minRange + " AND " + maxRange)); 

      obj['$and']=andCondition; 

      return obj; 
     } 
      break; 




     case (condition.hasOwnProperty("Inhibition") && condition.hasOwnProperty("bedrooms") && condition.hasOwnProperty("budgetPrice") && condition.hasOwnProperty("possession")): { 
      var budgetPrice = condition.budgetPrice.split(","); 
      var minRange = budgetPrice[0]; 
      var maxRange = budgetPrice[1]; 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_property`.`hp_property_inhibition_status_id` IN (" + condition.Inhibition + ")"),Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")"),Sequelize.literal("`hp_unit_details.hp_unit_prices`.`price_per_sqft` * `hp_unit_details`.`property_size` BETWEEN " + minRange + " AND " + maxRange),Sequelize.literal("`hp_property`.`property_completion_date` between now() and DATE_ADD(now(), INTERVAL "+condition.possession+" MONTH)")); 

      obj['$and']=andCondition; 

      return obj; 
     } 
      break; 



     case (condition.hasOwnProperty("bedrooms") && condition.hasOwnProperty("budgetPrice")): { 
      var budgetPrice = condition.budgetPrice.split(","); 
      var minRange = budgetPrice[0]; 
      var maxRange = budgetPrice[1]; 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")"),Sequelize.literal("`hp_unit_details.hp_unit_prices`.`price_per_sqft` * `hp_unit_details`.`property_size` BETWEEN " + minRange + " AND " + maxRange)); 

      obj['$and']=andCondition; 

      return obj; 
     } 
      break; 


     case (condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("budgetPrice") && !condition.hasOwnProperty("possession")): { 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")")) 
      obj['$and']=andCondition; 

      return obj; 
     } 
      break; 


     case (condition.hasOwnProperty("budgetPrice") && !condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("possession")): { 
      var budgetPrice = condition.budgetPrice.split(","); 
      var minRange = budgetPrice[0]; 
      var maxRange = budgetPrice[1]; 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_unit_details.hp_unit_prices`.`price_per_sqft` * `hp_unit_details`.`property_size` BETWEEN " + minRange + " AND " + maxRange)) 
      obj['$and']=andCondition; 

      return obj; 
     } 
      break; 
     case (condition.hasOwnProperty("possession") && !condition.hasOwnProperty("Inhibition") && !condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("budgetPrice")): { 
      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_property`.`property_completion_date` between now() and DATE_ADD(now(), INTERVAL "+condition.possession+" MONTH)")) 
      obj['$and']=andCondition; 
      return obj; 
     } 

      break; 

     case (condition.hasOwnProperty("possession") && condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("Inhibition") && !condition.hasOwnProperty("budgetPrice")): { 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_property`.`property_completion_date` between now() and DATE_ADD(now(), INTERVAL "+condition.possession+" MONTH)"),Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")")) 
      obj['$and']=andCondition; 
      return obj; 
     } 
      break; 

     case (condition.hasOwnProperty("possession") && condition.hasOwnProperty("bedrooms") && condition.hasOwnProperty("Inhibition") && !condition.hasOwnProperty("budgetPrice")): { 

      subCondition[dbId]=requestId; 
      andCondition.push(subCondition,Sequelize.literal("`hp_property`.`property_completion_date` between now() and DATE_ADD(now(), INTERVAL "+condition.possession+" MONTH)"),Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")"),Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")"),Sequelize.literal("`hp_property`.`hp_property_inhibition_status_id` IN (" + condition.Inhibition + ")")) 
      obj['$and']=andCondition; 
      return obj; 
     } 
      break; 



     default:{ 
      obj[dbId] =requestId 
      return obj; 
     } 




    } 

} 
+0

請加一個要測試的對象的示例測試的相關約束條件以及測試後應該發生的事例。 –

+0

everthing工作正常。但我寫了近100個開關櫃,因爲這給了我一些解決方案。我可以觀察到這個圖像。你可以得到一些想法 –

+0

對不起,但沒有任何數據結構的意義,它幾乎不可能幫助你。無論如何,ha小提示,你可以用條件中的''擁有''替換'condition.hasOwnProperty(「擁有」)''。 –

回答

1

它看起來像你可能只是輕鬆地對待每一個條件分別

var andCondition = []; 
subCondition[dbId]=requestId; 
andCondition.push(subCondition) 
if(condition.hasOwnProperty("Inhibition")) { 
    andCondition.push(Sequelize.literal("`hp_property`.`hp_property_ inhibition_status_id` IN (" + condition.Inhibition + ")")); 
}; 
if(condition.hasOwnProperty("bedrooms")) {   
    andCondition.push(Sequelize.literal("`hp_unit_details`.`hp_unit_ type_id` IN (" + condition.bedrooms + ")"); 
} 
if(condition.hasOwnProperty("budgetPrice")) { 
    var budgetPrice = condition.budgetPrice.split(","); 
    var minRange = budgetPrice[0]; 
    var maxRange = budgetPrice[1];  
    andCondition.push(Sequelize.literal("`hp_unit_details.hp_unit_prices`.`price_ per_sqft` * `hp_unit_details`.`property_size` BETWEEN " + minRange + " AND " + maxRange)); 
} 
if(condition.hasOwnProperty("possession")): { 
    andCondition.push(Sequelize.literal("`hp_property`.`property_completion_date`  between now() and DATE_ADD(now(), INTERVAL "+condition.possession+" MONTH)")); 
} 
obj['$and']=andCondition; 

return obj; 
+0

你是我的英雄人。我缺少小邏輯。 thanq很多請給一些鏈接,以改善這種類型的邏輯和links.but thanq很多人 –