Javascript - 快速检查10个变量是否介于0和1之间?

时间:2016-11-15 22:32:00

标签: javascript

我知道这可能是一个简单的循环,但无法想到它。

我有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"} ...

也许不是最优雅的格式,但是 - 必须有一种方法可以循环使用,对吗?

9 个答案:

答案 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()查找无效数字:

&#13;
&#13;
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;
&#13;
&#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在某些情况下被视为不安全。