2013-07-29 2 views
0

У меня есть массив 2D, как:как добавить атрибут в существующий массив динамически в Flex

Asia India 100 200 
Asia China 200 300 

Мне нужно добавить атрибут с именем «состояние» со значением ложно этого выше массива (внутренне), как дополнительный столбец к предыдущему массиву, где мой выход:

Asia India 100 200 state:false 
Asia China 200 300 state:false 

, так что я могу дать имя атрибута дополнительной колонки в «состоянии» для визуализации элементов. Как получить то же самое. Возможно ли это?

+0

Я немного смущен. Основываясь на информации, которую вы предоставили, у вас есть массив строк. Это верно? Или у вас есть массив объектов? Для меня нет смысла смешивать строки с объектными свойствами, хотя я считаю, что это технически возможно. – JeffryHouser

+0

Фактически в предыдущей публикации, посвященной AdvancedDataGrid, с помощью элемента управления флажком в виде GroupItemRenderer вы предоставили ответ на мой вопрос, чтобы использовать свойство данных и передать свойство, чтобы установить выбранные невыбранные состояния из этого. В попытке сделать то же самое, для чего мне нужно заполнить свойство с именем «состояние» в последнем столбце моего исходного массива, чтобы я мог установить это свойство определенной щелкнутой строки в true при выборе, false при отмене выбора. – Flexiflex

ответ

1

Для линий:

var originalArray:Array = //your original array 

var newArray:Array = new Array(); 

for each (var o:Object in originalArray){ 
    o.state = "false"; 
    newArray.push(o); 
} 

originalArray = newArray; 

trace(originalArray[0]) // Asia India 100 200 
trace(originalArray.state) //false 

с помощью Array.map() должен работать тоже.

Для invidual объектов:

 protected function addStates():void 
     { 

      var originalArray:Array = //your original array 
      var newArray:Array = new Array();    

      for each(var o:Object in originalArray){      
       var tempArray:Array = new Array(); 
       for each(var element:* in o){ 
        var newObject:Object = new Object(); 
        newObject.element = element; 
        newObject.state = "false"; 
        tempArray.push(newObject); 

       } 
       newArray.push(tempArray); 
      } 

      originalArray = newArray;  
      trace(originalArray[0][1].element); // India 
      trace(originalArray[0][1].state); // false 

     } 

Если кто-то имеет лучший/быстрый способ я заинтересован, чтобы услышать его.

+0

Мне нелегко ответить на этот вопрос. Сначала вы устанавливаете 'originalArray = new Array();' сразу же следуете несколько следов исходного массива. Почему эти следы вернут что-нибудь? Во-вторых, в исходном вопросе утверждается, что он имеет 2-мерный массив; но я не понимаю, будет ли этот код иметь дело с более чем 1 измерением. – JeffryHouser

+0

Исправлена ​​опечатка, извините, протестирована с помощью 2D-массива и, похоже, сработала. –

+0

@Pete TNT Возможно ли изменить этот массив как обычный 2D-массив, чтобы получить желаемый результат, где я могу получить свойство «state» непосредственно из исходного массива, что-то вроде «originalArray [row] [column] .state " – Flexiflex

Смежные вопросы