[英]The Conditional (Ternary) Operator is not working as expected(Javascript)
我有这个条件,我希望看到基于该结果userId
和name
(如果userId
呈现的搜索根据userId
,如果基于名字的名字呈现的搜索),但什么我收到的是,总是返回的else
与没有考虑userId
function findUsers(userId, name, skip, limit) {
let queryString = (userId) ?
'MATCH (user:User {userId:{userId}}) ' :
'MATCH (user:User) ' +
'WHERE ((user.username =~ {name}) OR (user.name =~ {name})) ' +
'WITH user ' +
'ORDER BY user.name ' +
'RETURN DISTINCT user.userId, user.username, user.name ' +
'SKIP {skip} LIMIT {limit}';
let cypher = {
query: queryString,
params: {
userId: userId,
name: util.format('(?i).*%s.*', name),
skip: skip,
limit: limit
}
};
三元级的优先级低于+
,因此所有串联都放入了else
部分。 使用括号可以使您根据三元数选择合适的MATCH
选项。
let queryString = (
(userId) ?
'MATCH (user:User {userId:{userId}}) ' :
'MATCH (user:User) ') +
'WHERE ((user.username =~ {name}) OR (user.name =~ {name})) ' +
'WITH user ' +
'ORDER BY user.name ' +
'RETURN DISTINCT user.userId, user.username, user.name ' +
'SKIP {skip} LIMIT {limit}';
您甚至可以进一步缩小范围:
let queryString = 'MATCH (user:User ' + (userId ? '{userId:{userId}}' : '') + ') ' +
'WHERE ((user.username =~ {name}) OR (user.name =~ {name})) ' +
'WITH user ' +
'ORDER BY user.name ' +
'RETURN DISTINCT user.userId, user.username, user.name ' +
'SKIP {skip} LIMIT {limit}';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.