如何在JavaScript中使用三元运算符进行返回?

5

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

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")

3
你可以将return放在三元操作符的前面。这样它将返回console.log结果的答案,如果没有结果则返回undefined。 - Mark
2
在三元运算符中不能使用 return:https://dev59.com/uVsW5IYBdhLWcg3wO1GN - Adriano
3
return 是一个语句,而非表达式。 - ASDFGerte
1
不要滥用三元运算符来代替 if-else 语句......除非是在代码高尔夫比赛中。 - user202729
3个回答

5

您需要使用return answers.length != 0 ? answers : console.log("nada")。它失败的原因是三元条件不支持在其条件中使用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语句会更好吗? - Jason Boyas
1
@JasonBoy,没有所谓的标准。这取决于你编写代码的方式或情况需要的方式。 - Ankit Agarwal
1
不要在console.log中输入“nada”。返回答案.length!= 0?答案:“nada” - Amit Mankotia
@AmitMankotia 同意这一点。但是答案是根据 OP 的代码上下文给出的。 - Ankit Agarwal

3
三元(条件)运算符期望“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
)

0

我过去经常使用类似这样的三元运算符。它很有趣,而且可以保持在一行内。

正如Ankit所展示的那样,可以通过将返回语句放在前面来实现。

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接