我的表单中有 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
这是向用户显示的默认掩码,即使没有预填充值也是如此。只有 € 值对比较很重要。我认为我当前的解决方案崩溃了,因为第三个值是空的。
最佳答案
您可以通过过滤数组、获取数字并检查每个值与其前身来采用嵌套方法。
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));
关于javascript - 检查数字/值在输入中是否按升序排列(jquery),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53536503/