【问题标题】:How to use ternary operator for a return in JS?如何在 JS 中使用三元运算符进行返回?
【发布时间】:2018-08-11 06:13:32
【问题描述】:

我有一个检查数组总和的函数:

function checkSum(array, sum) {
   // array = [1,4,6,11]  sum = 10
   var answers = [];
   var map = new Map();

   for (var x = 0; x < array.length; x++) {
       if (map.has(array[x])) {
           answers.push([sum - array[x], array[x]])
       } else {
           map.set(sum - array[x])  
       }
   }


   answers.length != 0 ? console.log(answers) : console.log("nada")
}

我最初的最后一行只是return answers;,但假设我不想返回一个空数组——相反,我宁愿只记录一个语句。

为什么return 在三元条件下不能像这样工作:

answers.length != 0 ? return answers : console.log("nada")

【问题讨论】:

  • 可以把return放在三元前面。它会返回未定义的console.log结果的答案。
  • 您不能在三元运算符中使用returnstackoverflow.com/questions/35231609/…
  • return 是一个语句,而不是一个表达式。
  • 不要在 if-else 中滥用三元......除非在 code-golf 中。

标签: javascript


【解决方案1】:

您需要使用return answers.length != 0 ? answers : console.log("nada")。它失败的原因是因为三元条件不支持 return 在它们的条件中。事实上,三元运算符的计算结果是一个表达式,而表达式不包含 return 语句。

function checkSum(array, sum) {
  // array = [1,4,6,11]  sum = 10
  var answers = [];
  var map = new Map();

  for (var x = 0; x < array.length; x++) {
    if (map.has(array[x])) {
      answers.push([sum - array[x], array[x]])
    } else {
      map.set(sum - array[x])
    }
  }


  return answers.length != 0 ? answers : console.log("nada")
}

console.log(checkSum([1, 4, 6, 11], 10));

【讨论】:

  • 有道理,谢谢。 return answers.length != 0 ? answers : console.log("nada") 读起来有点奇怪,对吧?标准的if 语句是更好的做法吗?
  • @JasonBoyas 没有标准。这取决于您的编码方式或情况要求的方式
  • 不要将“nada”放在 consol.log 中。返回答案。长度!= 0?答案:“nada”
  • @AmitMankotia 同意这一点。但答案是根据 OP 的代码上下文给出的。
【解决方案2】:

三元(条件)运算符期望“expr1”部分(return answers 所在的位置)是一个 表达式 - 即可以评估为一个值的东西,可以使用在其他表达中。但是return 语句是一个语句,它不可能被解释为值或表达式;因此,会引发语法错误。

代替

answers.length != 0 ? console.log(answers) : console.log("nada")

要么使用标准的 if 语句:

if (answers.length !== 0) return answers;
console.log('nada');

或者,如果您只想记录,请将条件运算符放在 console.log 中:

console.log(
  answers.length === 0
  ? 'nada'
  : answers
)

【讨论】:

    【解决方案3】:

    我过去经常使用这样的三元运算符。这很有趣,并且保持在一条线上。

    正如 Ankit 所示,当然可以通过将 return 语句放在前面来完成

    return answers.length != 0 ? answers : console.log('nada')
    

    但我建议您为此使用经典的if 语句。特别是因为您正在测试是返回一个值还是只记录一个值。

    if (answers.length != 0) {
        return answers;
    };
    console.log('nada')
    

    我会更进一步,建议您无论如何都返回相同的值类型。这对于使用您的功能将大有帮助 - 功能上。在这种情况下,这将涉及仍然返回数组(即使它是空的)并记录 nada 以及如果为空。

    if (answers.length == 0) {
        console.log('nada');
    };
    return answers;
    

    【讨论】:

      猜你喜欢
      • 2020-02-09
      • 2016-07-09
      • 2017-03-28
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 1970-01-01
      相关资源
      最近更新 更多