如何在Nodejs中执行三元运算

时间:2014-05-19 09:19:43

标签: node.js

我是nodejs.的新手,试图在nodejs代码中执行三元运算 这是使用

的代码段
 if (filter.serverId != "0") {// filter server details from report
                     filterJson(report, report[items].server,  filter.serverId, function ( filterdData) {
                        report = filterdData;
                      });
                   }else report = report;

我可以写这样的代码吗

report = filter.serverId != "0" ? filterJson(report, report[items].server, filter.serverId, function (filterdData) {
  report = filterdData;
}); : report

2 个答案:

答案 0 :(得分:3)

简而言之,您没有理由使用三元运算符。下面有完整的解释和解决方案。

两个代码片段说的是不同的东西。第一个有两个分配。如果条件为真,它在匿名函数中report = filterdData,否则将report分配给report

第二个代码段有三个分配。它将在匿名函数中执行report = filterdData条件为真,然后它将filterJson的结果分配给报告(我猜测filterJson返回undefined)。如果条件为false,则会再次将report重新分配给report

解决方案

首先,你的"否则"什么也没做。它只是将report分配给自己。摆脱它。其次,您要将结果filterJson分配给report,但这不是您想要使用filterJson的方式(我假设)。

这将做你想要的。

if (filter.serverId != "0") {
    filterJson(report, report[items].server,  filter.serverId, function (filterdData) {
        report = filterdData;
    });
}

如果你只是想摆脱花括号,你可以这样做,但保持它们被认为是好的风格。

if (filter.serverId != "0")
    filterJson(report, report[items].server,  filter.serverId, function (filterdData) {
        report = filterdData;
    });

三元运算符在这里真的不可用。

答案 1 :(得分:3)

您可以使用三元操作,但在这种特殊情况下,它可能无法正常工作。 (除了filterJson调用后的分号,三元组应该省略为有效代码。)

在这种情况下,filterJson方法似乎在回调函数中设置report = filterdData。我们可以假设filterJson没有向outer语句返回任何内容,即如果你已经完成report = filterJson(...),它将与report = undefined具有相同的结果。如果filterJson同步调用回调函数,它将在外部语句之前执行,并且报告将暂时设置,只有在紧接之后被外部语句覆盖。

效果类似于:report = filterdData; report = undefined;