2016-10-15 36 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很多人 –