2013-05-03 47 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