我有点困惑。有人可以向我解释为什么三元运算符在这里不起作用吗?
如果我使用常规的if语句执行此操作,
function check(arr, el) {
for (var i = 0; i < arr.length; i++) {
if (arr[i] === el) {
return true;
}
}
return false;
}
console.log(check([1, 2, 3, 4, 5], 3));
如果我使用三元运算符,那么在真实条件下我会得到假
function check(arr, el) {
for (var i = 0; i < arr.length; i++) {
return arr[i] === el ? true : false;
}
}
console.log(check([1, 2, 3, 4, 5], 3));
为了对比,这是一个简单的三元检查功能
function checkTernary(num1, num2) {
return num1 === num2 ? true : false;
}
console.log(checkTernary(2, 3)); // false
console.log(checkTernary(3, 3)); // true
我怀疑在循环之外检查错误条件就是答案。与之类似,我正在评估整个循环是否为假。但是评估每个迭代是否为真???我只需要对此有一个清晰的解释,如果可以的话,可能会转换为三元
答案 0 :(得分:2)
只要执行return语句,该函数就不会继续执行并返回一个值。
在第一种情况下,仅当条件为return
时,代码才会false
true
;如果条件为false,则它将继续进行。在第一种情况下,function
将在循环结束后返回false
。
在第二个示例中,没有条件执行return
,因此它将在第一次迭代中返回,并且函数将不再执行。
答案 1 :(得分:1)
一个函数只能返回一次,因此我们不能将它们置于循环中。但是,如果您真的想使用三元运算,可以这样做
=If(D83<=29,"Type A",if(D83<=59,"Type B","Type C"))
但是请记住,即使找到相等的元素,它也会遍历数组中的所有元素,因此,更好的解决方案是您的第一个解决方案,
function check(arr, el) {
let check = false;
for (var i = 0; i < arr.length; i++) {
check = arr[i] === el ? true : check;
}
return check
}
答案 2 :(得分:1)
arr[i] === el ? true : false
是一个expression
,它将被评估为true或false值。
return arr[i] === el ? true : false
是一个return statement
,只能执行一次,并且在第一次循环时将返回表达式arr[i] === el ? true : false
的值。
最重要的一点是,任何return statement
只能执行一次,或执行零次,这意味着无法执行。据我所知,没有别的会影响该规则。
答案 3 :(得分:0)
一个带有ES6的衬纸
const checkTernary = (num1, num2) => num1 === num2;
console.log(checkTernary(2, 3)); // false
console.log(checkTernary(3, 3)); // true