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;
}
4

1 回答 1

1

比较其他类型(字符串、数字等)效果很好,因为它们是所谓的基元,并且通过值进行比较。但是,数组是对象,因此它们是通过引用进行比较的。基本上这意味着[8,15]!= [8,15]

解决它的一种方法是替换这条线......

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

......像这样的东西......

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

... wherecompareElements将首先尝试检查其参数的类型,如果它们是对象,将比较它们的值。

于 2012-10-18T17:03:00.213 回答