2012-10-18 53 views
2

我有一個嵌套的數組與對數字的:找不到匹配

_open = [[8,15], [9,16]]; 

從中我想找到使用ArrayUtilities.findMatchIndex一個比賽,但它總是返回-1尋找一個元素的數組時。例如:

ArrayUtilities.findMatchIndex(_open, [8, 15]) 

我想知道是否有可能AS3比較陣列,因爲對比其他類型(字符串,數字等),只是做工精細

這裏的findMatchIndex():

public static function findMatchIndex(aArray:Array, oElement:Object, ...rest):Number { 
    var nStartingIndex:Number = 0; 
    var bPartialMatch:Boolean = false; 
    if(typeof rest[0] == "number") { 
    nStartingIndex = rest[0]; 
    }  
    else if(typeof rest[1] == "number") { 
    nStartingIndex = rest[1]; 
    } 
    if(typeof rest[0] == "boolean") { 
    bPartialMatch = rest[0]; 
    } 
    var bMatch:Boolean = false; 
    for(var i:Number = nStartingIndex; i < aArray.length; i++) { 
    if(bPartialMatch) { 
     bMatch = (aArray[i].indexOf(oElement) != -1); 
    } 
    else { 
     bMatch = (aArray[i] == oElement); 
    } 
    if(bMatch) { 
     return i; 
    } 
    } 
    return -1; 
} 

回答

1

比較其他類型(字符串,數字等)可以很好地工作,因爲它們是所謂的基元,並且通過值進行比較。數組雖然是對象,因此它們通過引用進行比較。基本上這意味着[8,15]!= [8,15]

圍繞它正在取代這一行的一種方式......

else { 
    bMatch = (aArray[i] == oElement); 
} 

......像這樣的東西......

else { 
    bMatch = compareElements(aArray[i], oElement); 
} 

...其中compareElements將嘗試檢查它的參數'首先是類型,如果它們是對象,則會比較它們的值。