Помогите найти красивое решение
Есть глобальный массив
var mass = new Array(); Есть первая функция functıon func1(){ for(var i = 0; i < anynum; i++){ mass[somekey1] = new Array(); mass[somekey1][somekey2] = somevalue; } } И вторая function func2(){ alert(mass[somekey1][somekey2]); } Это пример. Проблема в том, что вторая функция выводит undıfıed, т.к. первая функция забивает глобальный массив только ссылками на массивы, которые уничтожаются в конце тела первой функции. Проблема была бы решена если бы в js можно было заранее создать двумерный ассоциативный массив, а заранее задавать размеры тоже не годится, т.к. неизвестно количество элементов |
Цитата:
Не перебарщивайте с глобальными переменными. Не используйте массивы, как ассоциативные. http://alljs.ru/articles/array/ В частности http://alljs.ru/articles/array/whatis.html#assoc |
В твоем учебнике, пока, что только прочитал, и убедился в своих словах
Но не забывайте, что это всё-таки не многомерный массив, а массив массивов. В чём разница: двумерный массив, как частный случай многомерного, это матрица MxN, т.е., грубо говоря, таблица, из M строк и N столбцов. В каждой строке у неё одинаковое количество элементов, равно как и в каждом столбце. В JavaScript иначе, тут в массиве верхнего уровня лежат ссылки на другие произвольные массивы. Они могут быть одинакового размера, могут быть разного, а могут быть вообще не массивами. Многомерный массив — это нечто целое, массив массивов — это множество различных массивов, ссылки на которые лежат ещё в одном массиве. И для решения моих задач нужен многомерный ассоциативный массив |
Я не знаю, в чём вы убедились, но читаете вы как-то плохо. Непонятно, в чём вы меня пытаетесь убедить.
Ассоциативный массив в JS называется объектом. Не надо для него создавать массив. |
Каким образом, вы предлагаете мне это написать. Если вторая функция выводит результат работы первой, которая неизвестно количество раз добавляет в глобальный массив массивы неизвестной длины.
|
Не называйте хэши массивами, в JS это не одно и то же, вы только себя запутываете.
У хэшей нет свойства, отражающего количество элементов в нём. Цитата:
|
Кстати, если на область памяти указывает глобальный массив, то эти подмассивы же не должны очищаться в конце тела первой функции?
|
Нет никаких областей памяти на уровне языка. Объекты не удаляются, пока на них существует хоть одна ссылка.
|
Я пишу файловый менеджер, первая функция считывает часть древовидной структуры в виде xml и забивает это в многомерный массив, после чего с помощью второй функции и других функций я хочу работать с этим массивом, канешно, сейчас я могу скачать другие файловые менеджеры, посмотреть как у них там все устроено, но если бы этот маленький пример решился я бы мог все доделать без изменения всего кода
|
Цитата:
|
Часовой пояс GMT +3, время: 03:55. |