如何使用三元运算符在JS中返回?

时间:2018-08-11 06:13:33

标签: javascript

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

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 个答案:

答案 0 :(得分:3)

您需要使用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));

答案 1 :(得分: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
)

答案 2 :(得分:0)

我过去经常使用这种三元运算符。很好玩,并且保持一行。

正如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;