Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Помогите найти красивое решение (https://javascript.ru/forum/misc/14642-pomogite-najjti-krasivoe-reshenie.html)

nel15 24.01.2011 14:42

Помогите найти красивое решение
 
Есть глобальный массив
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 можно было заранее создать двумерный ассоциативный массив, а заранее задавать размеры тоже не годится, т.к. неизвестно количество элементов

Kolyaj 24.01.2011 14:46

Цитата:

Сообщение от nel15
т.к. первая функция забивает глобальный массив только ссылками на массивы, которые уничтожаются в конце тела первой функции

Ничего не удаляется.

Не перебарщивайте с глобальными переменными.

Не используйте массивы, как ассоциативные.
http://alljs.ru/articles/array/
В частности http://alljs.ru/articles/array/whatis.html#assoc

nel15 24.01.2011 14:53

В твоем учебнике, пока, что только прочитал, и убедился в своих словах

Но не забывайте, что это всё-таки не многомерный массив, а массив массивов. В чём разница: двумерный массив, как частный случай многомерного, это матрица MxN, т.е., грубо говоря, таблица, из M строк и N столбцов. В каждой строке у неё одинаковое количество элементов, равно как и в каждом столбце. В JavaScript иначе, тут в массиве верхнего уровня лежат ссылки на другие произвольные массивы. Они могут быть одинакового размера, могут быть разного, а могут быть вообще не массивами. Многомерный массив — это нечто целое, массив массивов — это множество различных массивов, ссылки на которые лежат ещё в одном массиве.

И для решения моих задач нужен многомерный ассоциативный массив

Kolyaj 24.01.2011 14:56

Я не знаю, в чём вы убедились, но читаете вы как-то плохо. Непонятно, в чём вы меня пытаетесь убедить.

Ассоциативный массив в JS называется объектом. Не надо для него создавать массив.

nel15 24.01.2011 15:08

Каким образом, вы предлагаете мне это написать. Если вторая функция выводит результат работы первой, которая неизвестно количество раз добавляет в глобальный массив массивы неизвестной длины.

Kolyaj 24.01.2011 15:10

Не называйте хэши массивами, в JS это не одно и то же, вы только себя запутываете.

У хэшей нет свойства, отражающего количество элементов в нём.

Цитата:

Сообщение от nel15
Каким образом, вы предлагаете мне это написать.

Я не знаю, что вам нужно написать.

nel15 24.01.2011 15:12

Кстати, если на область памяти указывает глобальный массив, то эти подмассивы же не должны очищаться в конце тела первой функции?

Kolyaj 24.01.2011 15:17

Нет никаких областей памяти на уровне языка. Объекты не удаляются, пока на них существует хоть одна ссылка.

nel15 24.01.2011 15:23

Я пишу файловый менеджер, первая функция считывает часть древовидной структуры в виде xml и забивает это в многомерный массив, после чего с помощью второй функции и других функций я хочу работать с этим массивом, канешно, сейчас я могу скачать другие файловые менеджеры, посмотреть как у них там все устроено, но если бы этот маленький пример решился я бы мог все доделать без изменения всего кода

Kolyaj 24.01.2011 15:25

Цитата:

Сообщение от nel15
после чего с помощью второй функции и других функций я хочу работать с этим массивом

А проблема в чём, кроме того, что вы работаете с объектом, а не с массивом?


Часовой пояс GMT +3, время: 17:11.