繁体   English   中英

条件(三元)运算符未按预期运行(Javascript)

[英]The Conditional (Ternary) Operator is not working as expected(Javascript)

我有这个条件,我希望看到基于该结果userIdname (如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM