javascript - 如何最好地编写这段代码,其中 JavaScript 中有这么多 if 条件?

标签 javascript node.js express sequelize.js

我从 getcondition(req, Sequelize) 获取条件(value)

代码是:

  options.where = getcondition(req, Sequelize);
       options.include = [{
                model: hp_builders,
                required: true
            }, { ....  },{ .... }]




 hp_property.findAndCountAll(options, {
            subQuery: false
        }).then(function(result) {
res.json(result);
});

所以对于不同的请求,我必须在 options.where = getcondition(req, Sequelize); 中分配不同的值

那么我怎样才能以有效的方式编写 getcondition(req, Sequelize);

我的 getcondition(req, Sequelize) 函数代码是:

function getcondition(req, Sequelize) {
    var condition = JSON.parse(req.query.selector);
    if (condition.hasOwnProperty("city_id")) {
        if (condition.hasOwnProperty("Inhibition")){
            console.log(JSON.stringify(condition));
            return {
                $and: [{
                        hp_city_id: condition.city_id
                    },
                    Sequelize.literal("`hp_property`.`hp_property_inhibition_status_id` IN (" + condition.Inhibition + ")"),
                ]
            }
        }
        if (condition.hasOwnProperty("bedrooms") && condition.hasOwnProperty("budgetPrice")) {
            var budgetPrice = condition.budgetPrice.split(",");
            var minRange = budgetPrice[0];
            var maxRange = budgetPrice[1];
            return {
                $and: [{
                        hp_city_id: condition.city_id
                    },
                    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)
                ]
            }
        }
        if (condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("budgetPrice")) {
            return {
                $and: [{
                        hp_city_id: condition.city_id
                    },
                    Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")")
                ]
            }
        } else if (condition.hasOwnProperty("budgetPrice") && !condition.hasOwnProperty("bedrooms")) {
            var budgetPrice = condition.budgetPrice.split(",");
            var minRange = budgetPrice[0];
            var maxRange = budgetPrice[1];
            return {
                $and: [{
                        hp_city_id: condition.city_id
                    },
                    Sequelize.literal("`hp_unit_details.hp_unit_prices`.`price_per_sqft` * `hp_unit_details`.`property_size`  BETWEEN " + minRange + " AND " + maxRange)
                ]
            }
        }
        return {
                hp_city_id: condition.city_id
        }
    }
    else if (condition.hasOwnProperty("id")) {
        if (condition.hasOwnProperty("Inhibition")){
            console.log(JSON.stringify(condition));
            return {
                $and: [{
                        hp_builders_id: condition.id
                    },
                    Sequelize.literal("`hp_property`.`hp_property_inhibition_status_id` IN (" + condition.Inhibition + ")"),
                ]
            }
        }
        if (condition.hasOwnProperty("bedrooms") && condition.hasOwnProperty("budgetPrice")) {
            var budgetPrice = condition.budgetPrice.split(",");
            var minRange = budgetPrice[0];
            var maxRange = budgetPrice[1];
            return {
                $and: [{
                        hp_builders_id: condition.id
                    },
                    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)
                ]
            }
        }
        if (condition.hasOwnProperty("bedrooms") && !condition.hasOwnProperty("budgetPrice")) {
            return {
                $and: [{
                        hp_builders_id: condition.id
                    },
                    Sequelize.literal("`hp_unit_details`.`hp_unit_type_id` IN (" + condition.bedrooms + ")")
                ]
            }
        } else if (condition.hasOwnProperty("budgetPrice" && !condition.hasOwnProperty("bedrooms"))) {
            var budgetPrice = condition.budgetPrice.split(",");
            var minRange = budgetPrice[0];
            var maxRange = budgetPrice[1];
            return {
                $and: [{
                        hp_builders_id: condition.id
                    },
                    Sequelize.literal("`hp_unit_details.hp_unit_prices`.`price_per_sqft` * `hp_unit_details`.`property_size`  BETWEEN " + minRange + " AND " + maxRange)
                ]
            }
        }
        return {
            hp_builders_id: condition.id
        }
    } else if (condition.hasOwnProperty("location_id")) {
        console.log(JSON.stringify(req.query.selector) + ".....");
        return {
            hp_location_id: condition.location_id
        }
    }
}

最佳答案

拆分函数并将条件和函数指针存储在数组中

var conditions = [
  {
      keys: [
          {"key": "id", required:true}
          {"key": "price", required:false}
      ],
      function: fn1
  },
  {
      keys: [
            {"key": "id", required:false}
            {"key": "price", required:false}
      ],
      function: fn2
  }
];

function checkKey(obj, id, required)
{
    if(required)
      return obj.hasOwnProperty(id);
    else
      return !obj.hasOwnProperty(id);
}

function checkKeys(obj, keys)
{
   var condition = true;
   for(var i = 0; i < keys.length; i++)
   {
      condition &= checkKey(obj, keys[i].key, keys[i].required);
   }
   return condition;
}

for(var i = 0; i < conditions.length; i++)
{
   if(checkKeys(obj, conditions[i].keys))
      return conditions[i].function(obj);
}

关于javascript - 如何最好地编写这段代码,其中 JavaScript 中有这么多 if 条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40016226/

相关文章:

javascript - XML-RPC 解析器?

JavaScript:对象(变量)是什么?

node.js - Socket.io 和 Express 设置

node.js - 如何获得可用的 Mongoose 鉴别器列表?

javascript - 为什么在我的 AJAX 调用中,response.chartAt(0) 返回未定义?

javascript - Gatsbyjs 和内部链接

node.js - jade 文件中出现意外标记 "indent"

node.js - KafkaJS 生产者 ssl 证书

javascript - 在 Javascript 中编写异步方法(代码在 Node.js 中运行)

node.js - 使用 nginx 应用程序在基本 url 上运行 NodeJs Express 应用程序