Преобразование между массивом ActionScript (Object []) и Vector. <Object>
Существуют ли опции для преобразования Array
в Vector
в ActionScript без итерации массива?
Как насчет другого пути (преобразование a Vector
в Array
)?
Ответы
Ответ 1
Для Array
- Vector
используйте функцию Vector.<TYPE>()
, которая принимает массив и вернет созданный вектор:
var aObjects:Array = [{a:'1'}, {b:'2'}, {c:'3'}];
// use Vector function
var vObjects:Vector.<Object> = Vector.<Object>(aObjects);
Для другого нет встроенной функции, поэтому вам нужно сделать цикл над каждым элементом Vector
и поместить затем в Array
Ответ 2
vObjects.push.apply(null, aObjects);
И еще один способ сделать это.
Трюк здесь прост. Если вы попытаетесь использовать метод concat()
для загрузки вашего массива в вектор, он не будет работать, потому что вход является вектором, и вместо добавления векторных элементов AS добавит весь вектор в виде одной записи. И если бы вы использовали push()
, вам нужно было бы просмотреть все элементы в массиве и добавить их по одному.
В ActionScript каждая функция может быть вызвана тремя способами:
-
Обычный способ: vObjects.push(aObjects)
Выдает ошибку, потому что aObjects
не является Object
, а Array
.
-
Метод call
: vObjects.push.call(this, myObject1, myObject2, ..., myObjectN)
Не помогает нам, потому что мы не можем разделить массив aObjects
в список, разделенный запятыми, который мы можем передать функции.
-
Метод apply
: vObjects.push.apply(this, aObjects)
Переход по этому маршруту AS с радостью примет массив в качестве входных данных и добавит его элементы в вектор. Вы все равно получите ошибку времени выполнения, если типы элементов массива и вектор не совпадают. Обратите внимание на первый параметр: он определяет, что работает с this
при запуске функции, в большинстве случаев null
будет нормально, но если вы используете ключевое слово this
в функции для вызова, вы должны передать что-то другое, кроме null
.
Ответ 3
var myArray: Array = [].concat(myVector);
может работать.