2013-05-03 100 views
0

我有一个麻烦的数组,在actionscript 3.0,我已经阅读了adobe页面,我可以检查,如果两个var有相同的信息。麻烦阵列和严格平等actionscrpt3

var num1:Number = new Number(1); 
var num2:Number = new Number(1); 

trace(num1 == num2); 
// true in ActionScript 3.0, false in ActionScript 2.0 

trace(num1 === num2); // true in ActionScript 3.0, false in ActionScript 2.0 

I tried to do a condition based on that, this is basically my code 

var sol:Array= new Array(); 

sol.push("a"); 

sol.push("b"); 

sol.push("c"); 

var letters:Array= new Array(); 

sol.push("a"); 

sol.push("b"); 

sol.push("c"); 

btngo_mc.addEventListener(MouseEvent.CLICK ,goshow); 

function goshow (event:MouseEvent):void{ 


    if(trace(sol===letters) ==true){ 

     gotoAndPlay("win"); 

    }else { 

     gotoAndPlay("lose"); 

    } 

} 

第一个问题是跟踪(sol ===字母)给我一个false值。

第二个问题是,我认为我的情况不起作用,我尝试了另一个条件,它给了我一个真正的价值,并一直让我“失去”。

我真的很赞赏你阅读这篇文章的时间,并祝你有个愉快的一周。

+2

当您创建两个数组时,即创建两个完全不同的对象(即使该数组具有相同的内容)。所以他们永远不会被评估为平等。 – BadFeelingAboutThis 2013-05-03 18:19:08

回答

1

在您的示例中,您正在创建两个单独的数组对象。

var sol:Array= new Array(); & var letters:Array= new Array();

无论阵列的内容,他们将永远是不同的对象,并为此将永远不会计算为相同。 sol == letters将始终返回false,因为它们被实例化为两个不同的对象。


关于第二个部分if(trace(sol===letters) ==true)

什么你正在评估这里是跟踪功能的返回值。由于跟踪返回void(我相信),这将始终评估为假(无论您传递到跟踪的东西。


你可能想要做的,是评估你的阵列,而不是数组本身的内容。下面是解决一个问题:ActionScript Comparing Arrays

+0

非常感谢,我检查了这个问题,它解决了很多我的问题,我希望你有一个美好的一天 – 2013-05-03 18:57:50

0

正如意见建议,并在对方的回答,你比较两个对象,而不是它们的内容

这里是你可以用比较两个数组的内容的功能你想要的方式:

function arraysMatch(first:Array, second:Array):Boolean 
{ 
    if (first.length == second.length) 
    { 
     for (var index:int = 0;index < first.length;index++) 
     { 
      if (first[index] != last[index]) 
       return false; 
     { 
     return true; 
    } 
     else 
      return false; 

} 
// usage 

if (arraysMatch(first,second)) 
{ 
    // arrays have matching contents 
    // do something 
} 
+0

谢谢,这很快。 我还没有想到解决方案= D – 2013-05-03 18:55:05