массивы динамической размерности
привык в 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, время: 09:13. |