我知道这可能是一个简单的循环,但无法想到它。
我有10个分数,我需要通过确保它们在0到1之间(大量小数)来验证它们。
输入相当松散,因此可以在其中显示空白,空,字母数字值。
现在我只是
if (!(score1>=0 && score1<=1)){var result="error"} else
if (!(score2>=0 && score2<=1)){var result="error"} else
if (!(score3>=0 && score3<=1)){var result="error"} ...
也许不是最优雅的格式,但是 - 必须有一种方法可以循环使用,对吗?
答案 0 :(得分:9)
只需使用every MDN,并将数字放在数组中。
var score1 = 0.89;
var score2 = 0.75;
var score3 = 0.64;
var booleanResult = [score1,score2,score3].every(s => s >= 0 && s<= 1);
console.log(booleanResult);
这个答案使用箭头功能:
或者,这是使用经典函数回调
的每个例子
var score1 = 0.89;
var score2 = 0.75;
var score3 = 0.64;
var booleanResult = [score1,score2,score3].every(function(s){ return s >= 0 && s<= 1 });
console.log(booleanResult);
答案 1 :(得分:1)
你可以创建一个数组var numbersArray = [var1, var2, var3 ...]
遍历数组并检查if,你可以创建一个&#34;标记&#34;变量带有布尔值,如果任何数字导致错误,则更改标志值并中断for ...
这就是它,非常简单。
答案 2 :(得分:1)
你可以尝试这样的事情
var array = [var1, var2, varn ...];
for (let arr of array) {
if (typeof arr === 'number')
if (arr >= your condition)
... the rest of your code here
}
答案 3 :(得分:1)
你可以这样做:
for (i = 1; i <= 10; i++)
{
if (!(window["score"+i.toString()]>=0 && window["score"+i.toString()]<=1)){var result="error"}
}
这是一个证明这个概念的小提琴:https://jsfiddle.net/gL902rtu/1/
正如@Rick Hitchcock所提到的,得分变量必须是全局的(例如,参见小提琴)
概念证明:
score1 = 0.5;
score2 = 0.1;
score3 = 0.5;
score4 = 0.8;
score5 = 0.9;
score6 = 0.4;
score7 = 0.10;
score8 = 0.4;
score9 = 0.5;
score10 = 0.8;
result = "noerror";
for (i = 1; i <= 10; i++){
if (!(window["score"+i.toString()]>=0 && window["score"+i.toString()]<=1)){
result="error"
}
}
console.log(result);
请注意,这可以与您的代码一起使用,但最简单的方法是确保将分数存储在数组中并循环使用它,它几乎就是数组的用途。
您可以在此处获取有关数组的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array
答案 4 :(得分:0)
我会使用一个函数,其中第一个参数是最小值,第二个参数是最大值,其余是要检查的数字,然后使用.filter()
查找无效数字:
function CheckRange(min, max) {
if (arguments.length > 2) {
var args = Array.prototype.slice.call(arguments);
return args.slice(2).filter(function(x) {
return x < min || x > max;
}).length == 0;
}
return true;
}
console.log(CheckRange(0, 1, 0.25, '', null, 0.7, 0.12, 0.15));
&#13;
在上面的代码中,empty或null被视为有效,如果需要,很容易禁止它们。
答案 5 :(得分:0)
const scores = [0.1, 0.2, 0.3, 0.4, 1, 2, 3, 4, 5, 6];
scores.forEach(function(score){
// http://stackoverflow.com/questions/3885817/how-do-i-check-that-a-number-is-float-or-integer
let isFloat = ( Number(score) === score && score % 1 !== 0 );
if (isFloat && (score > 0 && score < 1))
console.log("It's correct!");
});
答案 6 :(得分:0)
将您的分数放入数组将是最好的起点。您可以轻松地执行此操作:
var allScores = [score1, score2, score3];
一旦你有了一个阵列,如果你的目标是支持ES5的平台check here,那么你可以使用数组的过滤功能:
var errorScores = allScores.filter(function(s) {
return !(parseInt(s) >= 0 && parseInt(s) <= 1)
});
if (errorScores.length > 0) {
// Do some error handling.
}
Here is an example of this on code pen
或者,如果您不能使用过滤器,那么您可以执行如下循环:
for (var i = 0; i < allScores.length; i++) {
var score = allScores[i];
if (!(parseInt(score) >= 0 && parseInt(score) <= 1)) {
// Do some error handling.
document.write('something went wrong!');
}
}
Here is an example of this on code pen
注意使用上面的parseInt来处理,null,''和其他文本值。无效的数字将被解析为NaN
,这将无法满足条件。
答案 7 :(得分:-2)
如果您使用的是lodash,则可以使用
_。pluck(窗口,函数(键,值){})然后检查键是否包含变量名称且值小于10.
答案 8 :(得分:-2)
您可以使用
var i;
for (i = 0; i <= 10; i=i) { // i=i means do nothing
i++;
if( eval("score" + i + ">=0 && score" + i + "<=1") ) {
// do something
}
}
但是,您应该使用某种类型检查; eval
在某些情况下被视为不安全。