使用三元运算符检查数组中的值

时间:2019-06-15 14:51:00

标签: javascript

我有点困惑。有人可以向我解释为什么三元运算符在这里不起作用吗?

如果我使用常规的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

我怀疑在循环之外检查错误条件就是答案。与之类似,我正在评估整个循环是否为假。但是评估每个迭代是否为真???我只需要对此有一个清晰的解释,如果可以的话,可能会转换为三元

4 个答案:

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