массивы динамической размерности
привык в php делать так:
$a=array() $a[1]="qwr" // первый элемент $a['w']['asf']="asfsdfsd" // элемент w c подэлементом asf с содержимым asfsdfsd есть ли возможность в javascript сделать подобное? пробую так: a = new Array(); a[1,'qwe1',1,1]="qqqqq"; a[3,'qwe2',1,1]="qqqq1"; a[3,'qwe3',1,1]="qqqq2"; $("#not1").html(a[1,'qwe1',1,1]); $("#not2").html(a[3,'qwe2',1,1]); $("#not3").html(a[3,'qwe3',1,1]); <div id="not1"></div> <div id="not2"></div> <div id="not3"></div> выводит Код:
qqqq2 пробовал так: a[1]['qwe1'][1][1]="qqqqq"; a[3]['qwe2'][1][1]="qqqq1"; a[3]['qwe3'][1][1]="qqqq2"; $("#not1").html(a[1]['qwe1'][1][1]); $("#not2").html(a[3]['qwe2'][1][1]); $("#not3").html(a[3]['qwe3'][1][1]); вообще ошибку выдает В инете искал, не нашел сколь-нибудь похожего, везде создаются массивы/объекты со статической структурой. Может плохо искал? |
В JS все объекты динамические, в том числе массивы.
Цитата:
Перед тем, как использовать сущность, нужно её создать. var a = []; a[1] = {}; a[1].qwe = []; // ... |
получается нужно проверять ключ на существование и создавать, если не существует, то создавать.
Иначе ключи будут заменены. например так пробовал: a[1]={}; a[1]['qwe1']=[]; a[1]['qwe1'][1]=[]; a[1]['qwe1'][1][1]="qqqqq"; a[3]={}; a[3]['qwe2']=[]; a[3]['qwe2'][1]=[]; a[3]['qwe2'][1][1]="qqqq1"; a[3]={}; a[3]['qwe3']=[]; a[3]['qwe3'][1]=[];; a[3]['qwe3'][1][1]="qqqq2"; НО! Так как элементы массива создаются во вложенных циклах, причем некоторые из вложенных циклов могут и не отрабатываться вообще, каждый раз элементы будут пересозданы снова и данные будут потеряны. единственный вариант - выносить создание элемента за пределы массива. Но это как-то некрасиво ;) |
Проверяйте существование элемента, в чём проблема
if (!a[3]) { a[3] = {}; } |
так некрасиво ;)
и вызовет ошибку если a[3]===undefined в общем решил обойти используя существующие данные, которые уже есть в виде массивов. просто хотел сделать быстрое сравнение массивов с целью выяснить, какие элементы были удалены в новой итерации цикла, ячейки содержали бы единицы и при существовании элемента возвращали бы true в логических операциях. Быстро и компактно. А так куча сравнений - потеря производительности. может готовые функции есть какие-нить для реализации такого подхода создания массива? ведь языком это не запрещено, синтакис не додумали... |
Цитата:
Цитата:
|
ошибку вызовет потому, что переменная неопределена
а is not defined [Break on this error] if (!а[3]) { и после ошибки код не исполняется. и в чем некрасивость моей структуры? подскажете красивую структуру? |
Цитата:
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 06:59. |