Javascript 检查输入是否在两个值之间(多个条件)

Javascript 检查输入是否在两个值之间(多个条件),javascript,arrays,loops,Javascript,Arrays,Loops,我正在做一个项目,我需要阅读的数字,可以在不同的格式,并检查这些对用户的输入。在某些情况下,这将是一个间隔,如“8800-9000”,在某些情况下,这将是一个4位数字,在某些情况下,这将是一个5位数字 该数组如下所示: var testArray = [ { "label": "Nordea", "value": ["1100-1199", "1400-2099", "3000-3399", "3410-4999"] }, { "label": "Swedbank",

我正在做一个项目,我需要阅读的数字,可以在不同的格式,并检查这些对用户的输入。在某些情况下,这将是一个间隔,如“8800-9000”,在某些情况下,这将是一个4位数字,在某些情况下,这将是一个5位数字

该数组如下所示:

var testArray = [
{
    "label": "Nordea",
    "value": ["1100-1199", "1400-2099", "3000-3399", "3410-4999"]
},
{
    "label": "Swedbank",
    "value": ["7000-7120", "7123-8104", "8106-8999"]
},
{
    "label": "Sparbanken Nord",
    "value": "8264"
},
{
    "label": "Sparbanken i Enköping",
    "value": ["7121-7122", "8305-5"]
}];
我已经做了一个巨大的嵌套,如果混乱的工作种好。我唯一的问题是,当它找到匹配项时,它不会断开。如果我输入“8305-5”,它将在两个不同的对象属性数组中找到匹配项。我是否将“中间”功能设计错了

我还可以搜索比间隔大得多的数字,但仍然可以找到匹配的数字。区间“3410-3999”在一个数组中,如果我搜索“39999”,它仍然会得到一个匹配项

非常感谢大家的帮助

我迭代数组中的所有对象,如果value属性是一个数组,我将检查每个元素的长度,看看我应该匹配“between”-值还是直接的“==”匹配

如果不是数组,我会尝试一个简单的匹配

function searchForClearing() {

  var userInput = document.getElementById("clearingnummerTextBox").value;

  for (var i in testArray) {
    var currentObject = testArray[i];

    if (Array.isArray(currentObject.value)) {

      for (i = 0; i < currentObject.value.length; i++) {

        if (currentObject.value[i].length === 9) {

          var firstInterval = currentObject.value[i].split('-')[0];

          var lastInterval = currentObject.value[i].split('-')[1];

          if (userInput >= firstInterval && userInput <= lastInterval) {
            console.log("Inmatat: " + userInput + " " + "Träff på: " + currentObject.value);
            document.getElementById("bankResult").innerHTML = currentObject.label;
            console.log("Sökte mellan intervallen: " + firstInterval + " - " + lastInterval);

            console.log("9 teckens sök");
          }

        } else if (currentObject.value[i].length === 6) {

          if (userInput == currentObject.value[i]) {
            console.log("Inmatat: " + userInput + " " + "Träff på: " + currentObject.value);
            document.getElementById("bankResult").innerHTML = currentObject.label;
            console.log("Sökte mellan intervallen: " + firstInterval + " - " + lastInterval);
            console.log("6 teckens sök");
          }
        }
      }
    } else {
      if (currentObject.value.length === 9) {

        var firstInterval = currentObject.value.split('-')[0];
        var lastInterval = currentObject.value.split('-')[1];

        if (userInput >= firstInterval && userInput <= lastInterval) {
          console.log("Inmatat: " + userInput + " " + "Träff på: " + currentObject.label);
          document.getElementById("bankResult").innerHTML = currentObject.label;
          console.log("Sökte mellan intervallen: " + firstInterval + " - " + lastInterval);
          return true;
        }

      } else if (currentObject.value.length === 4) {

        if (userInput == currentObject.value) {
          console.log("Träff på clearingnummer som inte var i en array: " + userInput + " " + currentObject.label);
          document.getElementById("bankResult").innerHTML = currentObject.label;
          return true;
        }

      }

    }
  }
}
函数searchForClearing(){
var userInput=document.getElementById(“clearingnummerTextBox”).value;
用于(测试阵列中的var i){
var currentObject=testArray[i];
if(Array.isArray(currentObject.value)){
对于(i=0;i=firstInterval&&userInput=firstInterval&&userInput,则返回“39999”的原因为
true
,即使其超出范围是因为比较了JS中的字符串

此函数将从
testArray
返回值与用户输入匹配的第一个对象,或
未定义的

下面是一个完整的示例:

var testArray=[{
“标签”:“北欧”,
“价值”:[“1100-1199”、“1400-2099”、“3000-3399”、“3410-4999”]
}, {
“标签”:“瑞典银行”,
“值”:[“7000-7120”、“7123-8104”、“8106-8999”]
}, {
“标签”:“Sparbanken Nord”,
“值”:“8264”
}, {
“标签”:“Sparbanken i Enköping”,
“价值”:[“7121-7122”、“8305-5”]
}];
函数findTestObject(输入){
返回testArray.find(函数(testObj){
var值=testObj.value;
if(数组.isArray(值)){
返回值.some(函数(范围){
var rangeData=range.split('-');

return parseInt(rangeData[0])非常感谢您的详尽回答!这对我解释了很多。我来自C#,所以松散类型的语言对我来说真的很新。最后一个示例“8305-5”是一个实际值,这是我的问题之一。我还必须根据此值检查用户输入。我进行了检查,检查元素的长度是否为“6”,这似乎有效。不客气,伙计:)。对于8305-5部件,如果您无法更改正在接收的数据,而不是检查硬编码的长度值,则可以调用
range.split('-').sort()
,以便在比较之前始终按升序对最小/最大值进行排序,这样会更通用。例如
"39999" < "4999" // true
 39999  <  4999  // false
function findTestObject(input) {

  // iterate over the test array and 
  // stop as soon we found a match 
  // (as the passed function returns true)
  return testArray.find(function (testObj) {
    var value = testObj.value;

    // if current value is an array of ranges
    // check if userInput is within at least one of the ranges
    if (Array.isArray(value)) {
      return value.some(function (range) {
        // split the current range into min and max and compare with user input
        var rangeData = range.split('-');
        return parseInt(rangeData[0]) <= input && input <= parseInt(rangeData[1]);
      });
    } 
    // otherwise do a direct comparison
    else {
      return value === input;
    }
  });
}