试图通过输入查找我的数组中是否存在数字

时间:2016-10-11 13:51:20

标签: javascript html

我试图通过使用输入来搜索数组来查找数字。 知道为什么这不起作用?

每次运行代码时,我都会收到消息:

  

"号码不存在"

var arr = [18, 21, 34, 42, 65, 63, 39, 13, 15, 24, -1, 14, 15];

var number = document.getElementById("find").value;

var svar = "";

function exists(){

    for(i=0; i < arr.length; i++){
         if(parseInt(arr[i]) == parseInt(number)){
              svar++;
              document.getElementById("existsArray").innerHTML = tall + "Number exists";

         } else {
              document.getElementById("existsArray").innerHTML = tall + "Number does not exist";       
         }
     }
 }

<p id="existsArray"></p>
<input placeholder="what number would you like to find?" id="find" type="number">
<button type="button" onclick="exists()">Finn tallet</button>

4 个答案:

答案 0 :(得分:1)

我将for循环替换为indexOf

如果您仍想使用循环,则应在找到匹配的数字

时中断

&#13;
&#13;
var arr = [18, 21, 34, 42, 65, 63, 39, 13, 15, 24, -1, 14, 15];
var svar = 0;

function exists() {
  var number = +document.getElementById("find").value;
  if (arr.indexOf(number) !== -1) {
    svar++;
    document.getElementById("existsArray").innerHTML = "Number exists";
  } else {
    document.getElementById("existsArray").innerHTML = "Number does not exist";
  }
}
&#13;
<input type="number" id="find" />
<button onclick="exists();">Does it exist ?</button>
<p id="existsArray"></p>
&#13;
&#13;
&#13;

如果您想获得出现次数,您应该使用:

var occurrences = arr.filter(function (num) {return num === number;}).length

答案 1 :(得分:0)

所以你的问题是当你找到匹配的号码时你不会退出循环。因此,除非您要查找的数字是数组中的最后一个数字,否则它将保持循环并执行else子句。

function exist() {
    var number = parseInt(document.getElementById("find").value,10);
    for(i=0; i < arr.length; i++){ 
         if (exists === arr[i]) {
              // number exists
              break;    // <-- this is important another alternative would be to just 
                        // return at this point if the function doesn't do anything else
         }
         else {
              // this number doesn't match, so we'll keep searching
         }
    }
}

当然,如果您只使用内置函数Array.prototype.findArray.prototype.indexOf

,这会容易得多

答案 2 :(得分:0)

您还可以使用过滤器仅保留数组中与输入匹配的值:

var arr = [18, 21, 34, 42, 65, 63, 39, 13, 15, 24, -1, 14, 15];
var input = "65";
var result = arr.filter(item => item === parseInt(input));
if (result.length === 0) console.log("number doesn't exist");
else console.log("number exists");

答案 3 :(得分:0)

我已经对您的代码进行了一些修改,以帮助隔离您的测试用例。如果你查看现有代码的这种返工,你会看到你收到每个数组元素的消息,以“Number not exists”结尾,这是你原来的问题。这是因为这是最后一条消息,覆盖了之前的积极结果。

var number = "42";
//var svar = "";
var svar = 0;//changing this from a string to a number. Can't ++ a string.
var myArray = [18, 21, 34, 42, 65, 63, 39, 13, 15, 24, -1, 14, 15];
/* 
 * @param {String} num - Passing the value that I'm looking for, rather than 
 *    trying to pull it from elsewhere. This makes this much easier to test later.
 * @param {Array} arr - Array of integers to search
 */
function exists(num, arr) {
  for(i=0; i < arr.length; i++){
    //if(parseInt(arr[i]) == parseInt(number)){
    //No need to use parseInt here on the array. It's already a Number.
    if(arr[i] == parseInt(number)){
      svar++;/* I don't see any reason to be incrementing this. Perhaps it's elsewhere
          in your implementation? */
      //Using console.log() instead of elements not included in your code sample
      console.log("Number exists");
    } else {
      //This keeps overwriting the above, except in a case where
      //the last number would be a match!
      console.error("Number does not exist");
    }
  }
}

exists(number, myArray);

如果您希望它按预期工作,您可以消除“Number not exists”else分支,这将导致保留肯定的消息,并且您可以将默认文本保留为“Number not exists” ,或者使用我推荐的内容简化它:

var number = "42",
    number2 = "101",
    myArray = [18, 21, 34, 42, 65, 63, 39, 13, 15, 24, -1, 14, 15];

var existsSimple = function (num, arr) {
  return myArray.filter(function (itemNum) {return itemNum === parseInt(num);}).length > 0;
};

console.log('Number exists: ' + existsSimple(number, myArray));//true
console.log('Number exists: ' + existsSimple(number2, myArray));//false