Javascript:如何验证 4 个相关字段是否大于另一个

Javascript: How to validate 4 relative fields to be greater than another

所以我有四个字段需要一些逻辑。

逻辑必须如下所示,每个字段都必须大于之前的一个。让 [f1]、[f2]... 成为字段。

[f1] < [f2] < [f3] < [f4]

我遇到了一些疯狂的情况,因为如果我遇到这样的情况怎么办:

[null] < [null] < [null] < [f4]

现在我向 [f4] 字段添加一个值。这意味着 f3 的最大值必须低于 f4 值

现在我将值添加到字段 f2

[null] < [f2] < [null] < [f4]

糟糕!它也必须低于 [f4],但如果稍后我输入 [f3] 值,则它必须低于 [f3]。 另一边也一样,"GREATER THAN" 边...

是否有任何简单的方法来代替数千个 "if" 子句来实现它?

这就是我动态更改任何字段验证的方式:

  $("form").removeData("validator");
  $("#" + paramID).attr('data-val-range-max', valuemax)
  $("#" + paramID).attr('data-val-range-min', valuemin)
  $.validator.unobtrusive.parse(document);

编辑:

有效终点是所有元素是否有值,有效终点也如[5] < [null] < [null] < [10]

如果目的是查找数字是否按升序排列:

function lessThan(values){
     if(values.length < 2) throw new Error("Can't make comparison");
     var last = values[0],
         result;

    for(var i = 1; i < values.length; i++){
       result = last < values[i];
       last = values[i];
       if(!result) break;  
    }
    return result;
}

//lessThan([0,1,2,3]) === true;
//lessThan([0,1,0,3]) === false;

您可以使用 Array.prototype.every,它测试每个元素,如果没有通过测试则中断。

function lessThan(array) {
    var a;
    array = array.filter(function (a) { // filter the array
        return a != null;               // return only values != null
    });
    a = array.shift();                  // get the first element by shifting the array
    return array.every(function (b) {   // return true if every element pass the test
        var r = a < b;                  // make the test
        a = b;                          // get the new comparing value for the next test
        return r;                       // return the test result
    });
}

document.write(lessThan([42]) + '<br>');                     // true (obviously!)
document.write(lessThan([0, 1, 2, 3]) + '<br>');             // true
document.write(lessThan([null, null, null, 4]) + '<br>');    // true
document.write(lessThan([null, 3, null, 4]) + '<br>');       // true
document.write(lessThan([0, 1, 0, 3]) + '<br>');             // false
document.write(lessThan([5, null, null, 4]) + '<br>');       // false
document.write(lessThan([null, null, null, null]) + '<br>'); // true

喜欢的话可以替换

var r = a < b;
a = b;
return r;

return [a < b, a = b][0];

其中使用临时数组存储测试结果并将最后一个元素分配给 a.