Javascript 检查输入是否在两个值之间(多个条件)
我正在做一个项目,我需要阅读的数字,可以在不同的格式,并检查这些对用户的输入。在某些情况下,这将是一个间隔,如“8800-9000”,在某些情况下,这将是一个4位数字,在某些情况下,这将是一个5位数字 该数组如下所示: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",
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;
}
});
}