检查JavaScript数组中是否存在值

时间:2019-04-04 08:27:20

标签: javascript

我有以下代码段。

$scope.functionName = function(id) {
  var flag = true;
  var numbers = [1, 3, 30];

  for (var i = 0; i < numbers.length; i++) {
    if (id == numbers[i]) {
      flag = false;
    } else {
      flag = true;
    }
  }
  if (flag == true) {
    console.log("this is true");
  }
  if (flag == false) {
    console.log("this is true");
  }

}

我要执行的是,如果输入值在数组中,则flag的值应为false,否则为true。但是,在此代码段中,尽管在此之后流程进入了for循环,但它并未进入任何if条件。进入for循环后,它直接输出“ this is true”。 flag始终是真实的。

3 个答案:

答案 0 :(得分:2)

这是您要达到的目标的一种更清洁的方法

checkIfNumberIsInArray = function(number, arr) {
  return arr.includes(number)
}

console.log(checkIfNumberIsInArray(1, [1,2,3,4,5])) // true
console.log(checkIfNumberIsInArray(6, [1,2,3,4,5])) // false

请参见MDN JavaScript Reference - array.includes

答案 1 :(得分:0)

当您的值等于数组中的值时,添加一个break语句。

 $scope.functionName = function(id) {
      var flag = true;
      var numbers = [1, 3, 30];

      for (var i = 0; i < numbers.length; i++) {
        if (id == numbers[i]) {
          flag = false;
          break;
        } 
      }
      if (flag == true) {
        console.log("this is true");
      }
      if (flag == false) {
        console.log("this is false");
      }

    }

答案 2 :(得分:-1)

您不需要循环数组,只需使用indexOf。另外,请尝试将数字类型用于数字,将布尔类型用于布尔值,这两者都使用字符串

$scope.functionName = function(id)
{
    var numbers = [1, 3, 30];

    var flag = numbers.indexOf(parseInt(id, 10)) > -1;  // Convert to number just in case

    if(flag === true)
    {
        console.log("this is true");
    }
    if(flag === false)
    {
        console.log("this is true");
    }
}