Преобразование между массивом 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);

может работать.