24.01.2011, 14:42
|
Интересующийся
|
|
Регистрация: 17.10.2010
Сообщений: 13
|
|
Помогите найти красивое решение
Есть глобальный массив
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 можно было заранее создать двумерный ассоциативный массив, а заранее задавать размеры тоже не годится, т.к. неизвестно количество элементов
|
|
24.01.2011, 14:46
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от nel15
|
т.к. первая функция забивает глобальный массив только ссылками на массивы, которые уничтожаются в конце тела первой функции
|
Ничего не удаляется.
Не перебарщивайте с глобальными переменными.
Не используйте массивы, как ассоциативные.
http://alljs.ru/articles/array/
В частности http://alljs.ru/articles/array/whatis.html#assoc
|
|
24.01.2011, 14:53
|
Интересующийся
|
|
Регистрация: 17.10.2010
Сообщений: 13
|
|
В твоем учебнике, пока, что только прочитал, и убедился в своих словах
Но не забывайте, что это всё-таки не многомерный массив, а массив массивов. В чём разница: двумерный массив, как частный случай многомерного, это матрица MxN, т.е., грубо говоря, таблица, из M строк и N столбцов. В каждой строке у неё одинаковое количество элементов, равно как и в каждом столбце. В JavaScript иначе, тут в массиве верхнего уровня лежат ссылки на другие произвольные массивы. Они могут быть одинакового размера, могут быть разного, а могут быть вообще не массивами. Многомерный массив — это нечто целое, массив массивов — это множество различных массивов, ссылки на которые лежат ещё в одном массиве.
И для решения моих задач нужен многомерный ассоциативный массив
|
|
24.01.2011, 14:56
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Я не знаю, в чём вы убедились, но читаете вы как-то плохо. Непонятно, в чём вы меня пытаетесь убедить.
Ассоциативный массив в JS называется объектом. Не надо для него создавать массив.
|
|
24.01.2011, 15:08
|
Интересующийся
|
|
Регистрация: 17.10.2010
Сообщений: 13
|
|
Каким образом, вы предлагаете мне это написать. Если вторая функция выводит результат работы первой, которая неизвестно количество раз добавляет в глобальный массив массивы неизвестной длины.
|
|
24.01.2011, 15:10
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Не называйте хэши массивами, в JS это не одно и то же, вы только себя запутываете.
У хэшей нет свойства, отражающего количество элементов в нём.
Сообщение от nel15
|
Каким образом, вы предлагаете мне это написать.
|
Я не знаю, что вам нужно написать.
|
|
24.01.2011, 15:12
|
Интересующийся
|
|
Регистрация: 17.10.2010
Сообщений: 13
|
|
Кстати, если на область памяти указывает глобальный массив, то эти подмассивы же не должны очищаться в конце тела первой функции?
|
|
24.01.2011, 15:17
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Нет никаких областей памяти на уровне языка. Объекты не удаляются, пока на них существует хоть одна ссылка.
|
|
24.01.2011, 15:23
|
Интересующийся
|
|
Регистрация: 17.10.2010
Сообщений: 13
|
|
Я пишу файловый менеджер, первая функция считывает часть древовидной структуры в виде xml и забивает это в многомерный массив, после чего с помощью второй функции и других функций я хочу работать с этим массивом, канешно, сейчас я могу скачать другие файловые менеджеры, посмотреть как у них там все устроено, но если бы этот маленький пример решился я бы мог все доделать без изменения всего кода
|
|
24.01.2011, 15:25
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от nel15
|
после чего с помощью второй функции и других функций я хочу работать с этим массивом
|
А проблема в чём, кроме того, что вы работаете с объектом, а не с массивом?
|
|
|
|