我从 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/