AS3 сравнивает 2 массива для любой разницы

#flash #actionscript-3

#flash #actionscript-3

Вопрос:

Надеюсь, кто-нибудь сможет пролить некоторый свет на эту, казалось бы, простую проблему. Мне нужно сравнить два массива, чтобы увидеть, идентичны ли они.

 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");
}
  

Этот тест отслеживает «разные», даже если массивы кажутся одинаковыми.

Кто-нибудь знает, где я ошибаюсь?

Спасибо,

Отметьте

Комментарии:

1. == (и ===) проверка на идентичность, а не на равенство.

Ответ №1:

Если вы хотите сравнить массивы, просто используйте небольшую хитрость:

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

Комментарии:

1. до тех пор, пока вы никогда не попробуете эти непримитивные типы… что было бы большую часть времени.

2. Это будет работать для его случая — если элементами являются только числа и строки. Однако это не будет работать для массивов, хранящих более сложные переменные. Я уверен, что вы это знаете, я просто хотел указать на это для оригинального плаката 🙂

3. Быстрый способ скопировать массив: myCopyArr = myOriginalArr.concat();

Ответ №2:

Массивы являются контейнерами, поэтому проверка на равенство будет эквивалентна проверке равенства элементов, которые они содержат, а также индексов этих элементов.

Не вдаваясь в сравнения объектов, ваш пример не работает, потому что эти массивы представляют собой два разных несвязанных объекта. Вы можете добавлять или удалять элементы из одного, не затрагивая другого.

Если вы хотите сравнить элементы, которые содержит каждый массив, вам, возможно, придется придумать другой метод, рекурсивно сравнивая каждый элемент, что может быть непростой проблемой при работе со сложными объектами, но довольно простой для целых чисел, чисел или строк