检查输入中的数字/值是否按升序排列(jquery)

时间:2018-11-29 10:10:22

标签: javascript jquery

我在表单中有n个输入字段,用于输入值。我需要检查值是否按升序排列,否则会产生错误。

由于可以通过多种方式插入数字,因此我事先做了一个小的“清理”。

可能的输入是:

100.000
100000
100000,00
100.000,00

所有输入均有效,且所有输入均相同。我当前的JS看起来像这样:

我输入字段中的ID遵循以下模式:staff_u1, staff_u2, ...

for (var i = 1; i <= n; i++) {
    if (($("#staff_u"+(i+1)).length > 0 && !$("#staff_u"+(i+1)).val() != NaN) && parseFloat($("#staff_u"+i).val().replace(',','.').replace(' ','')) < parseFloat($("#staff_u"+(i+1)).val().replace(',','.').replace(' ',''))) {
        console.log("Not in ascending order");
    }
}

从一开始就给出了 3 个输入字段。我认为,在字段中没有价值也会产生不必要的行为。

举个例子,什么是有效的,什么不是:

1. --> 200000,00
2. --> 300000,00
3. --> 250000     
================
not valid, since the 2nd value is > 3rd

1. --> 15000
2. --> 25000
3. --> 35000
================
valid

1. --> 7.500,00
2. --> 12000
3. --> 15.000
4. --> '' (empty input, doesn't mean 0, should not be taken into the comparison)
================
valid, ascending, even though differently formatted

这是默认的掩码,即使没有预填任何值,也会向用户显示默认掩码。只有€值比较重要。我认为我的当前解决方案崩溃了,因为第三个值是空的。

Default mask

1 个答案:

答案 0 :(得分:2)

您可以采用嵌套方法,对数组进行过滤,获取数字并检查其前身是否为每个值。

function getNumber(s) {
    return +s.replace(/\./g, '').replace(/,/, '.');
}

function check(array) {
    return array
        .filter(Boolean)
        .map(getNumber)
        .every((v, i, a) => !i || a[i - 1] < v);
}

var arrays = [
        ['100.000', '80.000', '90.000'],      // false
        ['200000,00', '300000,00', '250000'], // false
        ['15000', '25000', '35000'],          // true
        ['7.500,00', '12000', '15.000', '']   // true
    ];

console.log(arrays.map(check));