2017-04-08 262 views
2

我希望能夠用用戶輸入的輸入來搜索數組。因此,例如,如果用戶在輸入字段中輸入「18」,根據數字18是否在數組中,「value not found」將出現或出現「value found」。使用用戶輸入搜索數組

這是我到目前爲止。

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"); 
     } 
    } 
}; 
+0

JavaScript是大小寫敏感的 – charlietfl

回答

1

你錯就錯在Input

if (arr[i] == Input) { 

敏感i的情況下應該是

if (arr[i] == input) { 

然後你真的不需要else部分。只需在循環後面寫入未找到的警報並在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"); 
}; 
0

我已經重構你的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'>

0

你有一些問題:

  • 移動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"); 
 
}
<input id="search" type="text" onchange="beginhere()">