Маке уже указал на проблему. Оператор ==
сообщит вам (для ссылочных типов, таких как объекты Array), если две переменные указывают на один и тот же объект. Это явно не тот случай. У вас есть 2 разных объекта, которые имеют одинаковый контент.
Итак, вы, вероятно, ищете способ сравнить, имеют ли 2 массива одинаковое содержимое. Эта, казалось бы, простая задача может оказаться сложнее, чем кажется.
Стандартным способом является использование такой функции:
function areEqual(a:Array,b:Array):Boolean {
if(a.length != b.length) {
return false;
}
var len:int = a.length;
for(var i:int = 0; i < len; i++) {
if(a[i] !== b[i]) {
return false;
}
}
return true;
}
Это будет работать в некоторых (возможно, в большинстве) случаях. Но произойдет сбой, если элементы в любом из массивов имеют семантику ссылочного типа (в отличие от семантики типа значения). В основном, числа (включая целые числа и числа), строки, логические, нулевые и неопределенные имеют семантику типа значения:
Дано:
var a:int = 0;
var b:int = 0;
Это будет справедливо:
trace(a == b);
Для всего остального сравнение с ==
вернет true, только если обе переменные ссылаются на один и тот же объект:
var a:Object = {data:1};
var b:Object = {data:1};
trace(a == b); // false
Но
var a:Object = {data:1};
var b:Object = a;
trace(a == b); // true
Итак, если ваши массивы содержат объекты (или, в свою очередь, другие массивы), areEqual завершится ошибкой в этом случае:
var arr_1:Array = [{data:1}];
var arr_2:Array = [{data:1}];
trace(areEqual(arr_1,arr_2));
Почему? Поскольку объект {data:1}
, который вы сохранили в arr_1
, отличается от объекта {data:1}
, хранящегося в arr_2
.
Я не думаю, что возможно создать универсальную функцию, которая рекурсивно проверяет, равны ли содержимое двух массивов, потому что нет общего способа определить, следует ли считать два объекта равными. Это действительно зависит от ваших объектов, вашего домена и т. Д. в вашем приложении два объекта следует считать равными, если они имеют одинаковое ìd
(при условии, что вы определили свойство ìd
). Как я думаю, это показывает, что нет способа узнать заранее, что делает объекты равными.