如何使用数组中给定的一组规则验证值

how to validate a value with a set of rules given in an array?

本文关键字:一组 规则 验证 数组 何使用      更新时间:2023-09-26

我有一个值3000,我有一组规则在数组

var rule = [greaterthan-2000,lessthan-4000,greaterthan-5000,lessthan-6000];

现在我将如何用数组中给定的规则集验证值(3000)。

(注意:先满足哪个条件,即为结果。在本例中,'3000'满足rule[0]和rule[1],但输出应该是rule[0])

你可以使用一些有些迭代和数组,并为数组的每个成员运行给定的函数。一旦你返回true,它就停止扫描。因此,您可以使用它来测试每个规则函数(假设它们接受int),一旦找到,保存找到的结果并返回。下面是一个例子:

var x;
var foundRule = null;
rules.some(function (rule) {
  if (rule.call(x)) {
    foundRule = rule    
    return true;
  }
}

可以从这个函数中得到运算符

var getop = function(input)
{
    if(input.includes("greaterthan"))
        return '>'
    else if(input.includes("lessthan"))
        return '<'
}

和这个函数的数字。

var getnum = function(input)
{
    var pos = input.indexOf("-");
    return(input.substring(pos+1,input.length))
}

现在使用check函数检查条件。

var check = function(number, conditions)
    {
    for(var i in conditions)
    {
        var op = getop(conditions[i]);
        var cond_no = getnum(conditions[i]);
            if(op == '>')
                if(number > cond_no)
                    return i
            if(op == '<')
                if(number < cond_no)
                    return i
    }
    }

现在声明您的条件和它的数字,并获得输出

var conditions =  ["greaterthan-2000","lessthan-4000","greaterthan-5000","lessthan-6000"];
var number = 3000;
console.log("rule["+check(number,conditions)+"]");

将导致rule[0]

这是一个绕过使用function本身的工作:

var rules = [
  function(x) {
    return x > 2000;
  },
  function(x) {
    return x < 4000;
  },
  function(x) {
    return x > 5000;
  },
  function(x) {
    return x < 6000;
  }
];
var indexOfRule = function(x) {
  var j = -1;
  for (var i = 0, l = rules.length; l > i; i++) {
    if (rules[i](x)) { //function call, matches rule 
      j = i;
      break;
    }
  }
  return j;
};
alert(indexOfRule(3000)); //0
alert(indexOfRule(0)); //1