Переменная массива в другой переменной массива - PullRequest
0 голосов
/ 27 января 2011

Извините, если название немного сбивает с толку.Вот что я имел в виду - у меня есть массив и и объект.Позвольте мне дать визуальное представление:

Это мой объект:

obj["id"] = ["1","2","3"];
obj["name"] = ["na","no","ne"];

мой itemArray:

itemArray = ["id","name"];

А теперь я хочу получить элементы в объектеЯ пытался

for (var i:int = 0; i<objLen; i++)
{
    for (var j:int = 0; j<count; j++)
    {
        textBox_txt.appendText(obj.arr[i][j]);
    }
}

, но это не работает.Как на самом деле использовать переменную arr [i] в ​​массиве?: S

Ответы [ 3 ]

0 голосов
/ 27 января 2011

Хорошо, я только что узнал об этом. Ответ jeremynealbrown работает, но есть и другой способ: http://www.kirupa.com/forum/showpost.php?p=2596002&postcount=2

var obj = new Object();
obj["id"] = ["1","2","3"];
obj["name"] = ["na","no","ne"];
obj["sasdf"] = "asdfa asdfasdf asdf asdf af";

for (var i in obj)
{
       if (obj[i] is Array)
       {
               for (var j:int = 0; j<obj[i].length; j++)
               {
                       trace(obj[i][j]);
                       //textBox_txt.appendText(obj.arr[i][j]);
               }

       }

}
0 голосов
/ 27 января 2011

По сути, использование двух операторов [] для доступа к вложенным массивам является правильным, но вы путаете способ объединения массивов:

  1. Ваш первый объект имеет два именованных свойства , "id" и "name", , каждое из которых содержит одномерные массивы :

    var obj:Object = {
        id:["1", "2", "3"],
        name:["na", "no", "ne"];
    }
    

    (я использую это обозначение, чтобы сделать вещи более читабельными - он создает тот же объект, что и ваш код. Обратите внимание на скобки {} и []!)

  2. Ваш itemArray - это одномерный массив, в котором есть только две строки, но он больше нигде не встречается в коде .

    itemArray = ["id", "name"];
    
  3. Ваш цикл for перебирает свойство "arr" объекта obj , которого не существует:

    for (var i:int = 0; i<objLen; i++)
    {
        for (var j:int = 0; j<count; j++)
        {
            textBox_txt.appendText(obj.arr[i][j]); // obj has properties "id" and "name", but not "arr"
        }
    }
    

Теперь забудьте обо всем выше. Вот как вы могли бы сделать это правильно:

  1. Если вам нужен двумерный массив , вы можете опустить имена свойств:

    var arr:Array= [ 
                       ["1", "na"], 
                       ["2", "no"], 
                       ["3", "ne"]
                   ];
    

    (Примечание: здесь есть вложенные наборы операторов [], без {} скобок!) и повторяем так:

    for (var i:int = 0; i<arr.length; i++)
    {
        for (var j:int = 0; j<arr[i].length; j++)
        {
            textBox_txt.appendText(arr[i][j]);
        }
    } // output: 1na2no3ne
    
  2. Вы также можете использовать именованные свойства, чтобы все выглядело хорошо, и ваш код стал более читабельным:

    var itemArray:Array = [ 
        {id:"1", name:"na"}, 
        {id:"2", name:"no"}, 
        {id:"3", name:"ne"} 
    ];
    

    (Обратите внимание, как скобки [] и {} поменялись местами!)

    Это одномерный массив, содержащий 3 объекта , каждый со свойствами «id» и «name». Затем вы можете выполнить итерацию, чтобы добавить отдельные имена объектов в ваш текст следующим образом:

    for each ( var obj:Object in itemArray) {
        textBox_txt.appendText(obj.id + "" + obj.name);
    } // output: 1na2no3ne
    
0 голосов
/ 27 января 2011

Возможно что-то вроде этого:

var array:Array;
var count:int;
for( var i:int = 0; i < itemArray.length; i++ )
{
    array = obj[ itemArray[ i ] ];
    count = array.length;
    for ( var j:int = 0; j<count; j++ )
    {
        textBox_txt.appendText( array[ j ] );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...