【问题标题】:Javascript: Comparing output of function to array within a conditionalJavascript:将函数的输出与条件内的数组进行比较
【发布时间】:2014-08-17 23:25:40
【问题描述】:

我正在使用此代码将函数的输出(来自 args 数组)与预期输出数组进行比较,并将结果记录在数组中(称为 results[],默认填充为 false 值,因此为什么没有 else 条件)。

        for(i=0;i<args.length;i++){
          console.log('in for');
          if(f(args[i])==expected[i]){
            console.log('in if');
            results[i] ='true';

          }
        }

当我运行该函数时,“in for”会按预期出现在控制台 args.length 中。然而,'in if' 永远不会出现(即使条件为真)。有什么问题?

编辑:将提供更多详细信息 我正在做一个网站,人们可以输入js代码来解决某个问题,网站会从textarea中获取代码,运行代码,并与输出进行比较。

下面是我非常杂乱的测试函数,它接受用户输入到文本区域的代码参数:

 function test(inputcode){
      var passed = inputcode;
      var allcorrect = true;
      try{
        eval( "var f = " + passed);
        var args = ["pogchamp","progChamprogCHAMPchamp","pro2GCHAMPCprogH9AMPprogchamp","progchamp19","1pro2champ2prog","progCHamp","Prog Champ"];
        var expected = ['false','false','true','true','true','true','true'];
        var results=['false','false','false','false','false','false','false'];

        for(i=0;i<args.length;i++){
          console.log('in for');
          console.log(f(args[i]));
          console.log(expected[i]);
          if(f(args[i])==expected[i]){
            console.log('in if');
            results[i] ='true';

          }
        }
        for(i=0;i<results.length;i++){
         if(results[i]==false){
          allcorrect=false;
        }
      }

    }
    catch(err){
      alert("Something went wrong. Check your code and resubmit.");
      console.log(err.message);
    }

  }

当我在 chrome 中运行代码时的输出是:

in for
false
false
in for 
false 
false 
in for 
false 
true 
in for 
false 
true 
in for 
false 
true 
in for 
false 
true 
in for 
false 
true

在这种情况下,输入函数 (f()) 只是返回 false,并且什么也不做。

function foo(str) {


return false; //auto-generated
}

【问题讨论】:

  • 尝试在if 语句之前记录f(args[i])expected[i],看看它们显示了什么。
  • 当我测试它时,它按预期工作:jsfiddle.net/HbMt9
  • @alizahid,我将向 OP 添加更多信息(请稍等,抱歉)。我在 if 之前记录了 f(args[i]) 和 expected[i] 并且它们正确显示。
  • f 是什么,我怀疑这就是你的问题。
  • 添加了详细信息。我感觉它也与 f 有关,但我不确定发生了什么。

标签: javascript arrays loops return conditional


【解决方案1】:

false'false' 有很大区别;前者,从测试函数返回,是一个布尔值,后者是一个字符串。

例如:

false == 'true'  // false (okay)
false == 'false' // false (hmmm)

expected 数组定义更改为:

var expected = [false,false,true,true,true,true,true];

【讨论】:

    【解决方案2】:

    您正在将字符串 'false' 与布尔值 false 进行比较。从您的函数返回一个字符串或将数组更改为布尔值,它将起作用。

    一个非空字符串(即使它是'false')总是真实的,并且与false 相比将返回false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多