【问题标题】:Search array using user input使用用户输入搜索数组
【发布时间】:2017-09-03 18:09:10
【问题描述】:

我希望能够使用用户输入的输入来搜索数组。因此,例如,如果用户在输入字段中输入“18”,则会出现“未找到值”或“找到值”,具体取决于数字 18 是否在数组中。

这是我目前所拥有的。

var search = document.getElementById("search");
var arr = [18,23,20,17,21,18,22,19,18,20];

function beginhere() {
   var input = document.getElementById("Input").value;

   for (i=0; i<arr.length; i++){
      if (arr[i] == Input) {
         alert(arr[i]);
      } else {
         alert("Value not found");
      }
   }
};

【问题讨论】:

  • javascript 区分大小写

标签: javascript arrays search


【解决方案1】:

你的错误是Input中的i区分大小写

 if (arr[i] == Input) {

应该是

 if (arr[i] == input) {

然后你真的不需要else 部分。只需在循环后写 not found alert 并在 if 中写 return 语句即可。

function beginhere() {
   var input = document.getElementById("Input").value;

   for (i=0; i<arr.length; i++){
      if (arr[i] == input) {
         alert(arr[i]); 
         return;
      }
   }
   alert("Value not found");
};

没有循环你可以试试

function beginhere() {
   var input = document.getElementById("Input").value;

     if(arr.indexOf(parseInt(input)) != -1) {
          alert(input); 
          return;
      }
   alert("Value not found");
};

【讨论】:

    【解决方案2】:

    我已经重构了您的 if 条件,因为目前它会在 for 循环的每个循环中提醒结果。如果循环在数组中找到给定的数字,则记录该数字并返回函数(不再需要让循环保持活动状态)。如果没有 - 将该值记录到控制台。

    var arr = [18, 23, 20, 17, 21, 18, 22, 19, 18, 20];
    
    function beginhere() {
      var input = document.getElementById("Input").value;
      for (i = 0; i < arr.length; i++) {
        if (arr[i] == input) {
          console.log(arr[i]);
          return;
        }
      }
      console.log('value not found');
    };
    <button onclick="beginhere()">click</button>
    <input id='Input'>

    另一种可能的解决方案,使用Array#find

    var arr = [18, 23, 20, 17, 21, 18, 22, 19, 18, 20];
    
    function beginhere() {
      var input = document.getElementById("Input").value,
          res = arr.find(v => v == input);
          console.log(res ? res : "wasn't found");
    };
    <button onclick="beginhere()">click</button>
    <input id='Input'>

    【讨论】:

      【解决方案3】:

      你有一些问题:

      • search 声明和初始化移到函数内部,因为您需要的是实际值,而不是开始时的值。

      • 通过在值前面添加plus 将搜索值转换为数字。这使用unary plus + 将值(字符串或数字)转换为数字。

      • search测试。

      • 如果找到search,则退出函数。

      • 如果循环后没有找到,则只显示一条消息。

      var arr = [18, 23, 20, 17, 21, 18, 22, 19, 18, 20];
      
      function beginhere() {
          var search = +document.getElementById("search").value, // need to covert to integer
              i; // declaration missing
      
          for (i = 0; i < arr.length; i++) {
              if (arr[i] == search) { // use search variable
                  alert(arr[i]);
                  return;
              }
          }
          alert("Value not found");
      }
      &lt;input id="search" type="text" onchange="beginhere()"&gt;

      【讨论】:

        猜你喜欢
        • 2015-12-17
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 2021-11-23
        • 2021-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多