我有一个检查数组中和的函数:
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")
答案 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;