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]

それを回避する1つの方法は、この行を置き換えることです...

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

...このようなもので...

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

... wherecompareElementsは最初に引数の型をチェックしようとし、それらがオブジェクトの場合はそれらの値を比較します。

于 2012-10-18T17:03:00.213 に答える