我在表单中有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
这是默认的掩码,即使没有预填任何值,也会向用户显示默认掩码。只有€值比较重要。我认为我的当前解决方案崩溃了,因为第三个值是空的。
答案 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));