嗨我在这段代码中遇到了困难,我认为我的if else条件是错误的。
当你运行程序时,如果用户什么都没有输入,它会发送'list-group-item-danger'这是第一个if语句,然后如果用户同时输入NAME和PLACE,它会发送'list-group-项目 - 成功。两者都是正确的。
如果用户输入它发送的至少一个输入(NAME或PLACE) 'list-group-item-success'也是错误的,因为它没有 满足第二个if语句(PLACE和(&&)名称)的条件,它 应该在它发送的最后一个声明上 名单基的项警告'
var obj = {};
db.all("SELECT * FROM f41 WHERE id = ?",[id], function(err,rows){
if((rows[0].NAME == null || rows[0].NAME == '') && (rows[0].PLACE == null || rows[0].PLACE == ''))
{
obj.f41='list-group-item-danger';
}
else if((rows[0].NAME != null || rows[0].NAME != '') && (rows[0].PLACE != null || rows[0].PLACE != ''))
{
obj.f41='list-group-item-success';
}
else
{
obj.f41='list-group-item-warning';
}
res.send(obj);
});
答案 0 :(得分:2)
据我了解,问题在于:
(rows[0].NAME != null || rows[0].NAME != '')
如果row[0].NAME
为null
,则其不等于""
,反之亦然。因此它将返回真实。
你可以尝试
!(rows[0].NAME == null || rows[0].NAME === '')
您还可以尝试创建一个utils函数isEmpty
var obj = {};
db.all("SELECT * FROM f41 WHERE id = ?", [id], function(err, rows) {
if (isEmpty(rows[0].NAME) && isEmpty(rows[0].PLACE)) {
obj.f41 = 'list-group-item-danger';
}
else if (!isEmpty(rows[0].NAME) && !isEmpty(rows[0].PLACE)) {
obj.f41 = 'list-group-item-success';
} else {
obj.f41 = 'list-group-item-warning';
}
res.send(obj);
});
function isEmpty(v){
return v === null || v.toString().trim().length === 0
}
答案 1 :(得分:1)
你可以像这样改善你的条件
if(rows[0].NAME && rows[0].PLACE) {
obj.f41='list-group-item-success';
} else if(!rows[0].NAME && !rows[0].PLACE) {
obj.f41='list-group-item-danger';
} else {
obj.f41='list-group-item-warning';
}