2012-10-18 152 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将尝试检查它的参数'首先是类型,如果它们是对象,则会比较它们的值。