2011-11-02 73 views
0

希望有人能够对这个看似简单的问题提出一些看法。 我需要比较两个数组以查看它们是否相同。AS3比较2个阵列的任何区别

var _array1:Array = new Array(); 
var _array2:Array = new Array(); 


_array1.push(1,2,3,4,5); 

_array2 = _array1.concat(); 

trace("_array2 "+_array2); 
//traces 1,2,3,4,5 so I am assuming the copy took place. 


if (_array2 == _array1) { 
    trace("the same"); 
} else { 
    trace("different"); 
} 

即使数组看起来相同,该测试也会跟踪'不同'。

有人会知道我要去哪里错了吗?

感谢,

马克

+0

==(和===)测试的身份,而不是平等。 –

回答

0

数组是容器,所以检查平等的将相当于检查它们所包含的元素以及这些元素的索引的平等。

没有深入到对象比较,你的例子不起作用,因为这些数组是两个不同的不相关的对象。您可以添加或删除一个元素而不会影响另一个元素。

如果你想比较每个数组包含的元素,你可能必须想出一个不同的方法,递归地比较每个元素,这在处理复杂对象时可能不是一个简单的问题,但对于整数很直接,数字或字符串

9

如果要比较数组只使用小窍门:

if (String (_array2) == String (_array1)) 
{ 
    trace("the same"); 
} else { 
    trace("different"); 
} 
+4

只要你从不尝试这种非原始类型......这将是大部分时间。 –

+2

这将适用于他的情况 - 如果只有数字和字符串是元素。但是,它不适用于存储更复杂变量的数组。我相信你知道这一点,我只是想指出它的原始海报:) – gthmb

+0

复制数组的快速方法:myCopyArr = myOriginalArr.concat(); – Cadin