Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.01.2011, 14:42
Интересующийся
Отправить личное сообщение для nel15 Посмотреть профиль Найти все сообщения от nel15
 
Регистрация: 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 можно было заранее создать двумерный ассоциативный массив, а заранее задавать размеры тоже не годится, т.к. неизвестно количество элементов
Ответить с цитированием
  #2 (permalink)  
Старый 24.01.2011, 14:46
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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

Не используйте массивы, как ассоциативные.
http://alljs.ru/articles/array/
В частности http://alljs.ru/articles/array/whatis.html#assoc
Ответить с цитированием
  #3 (permalink)  
Старый 24.01.2011, 14:53
Интересующийся
Отправить личное сообщение для nel15 Посмотреть профиль Найти все сообщения от nel15
 
Регистрация: 17.10.2010
Сообщений: 13

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

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

И для решения моих задач нужен многомерный ассоциативный массив
Ответить с цитированием
  #4 (permalink)  
Старый 24.01.2011, 14:56
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

Ассоциативный массив в JS называется объектом. Не надо для него создавать массив.
Ответить с цитированием
  #5 (permalink)  
Старый 24.01.2011, 15:08
Интересующийся
Отправить личное сообщение для nel15 Посмотреть профиль Найти все сообщения от nel15
 
Регистрация: 17.10.2010
Сообщений: 13

Каким образом, вы предлагаете мне это написать. Если вторая функция выводит результат работы первой, которая неизвестно количество раз добавляет в глобальный массив массивы неизвестной длины.
Ответить с цитированием
  #6 (permalink)  
Старый 24.01.2011, 15:10
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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

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

Сообщение от nel15
Каким образом, вы предлагаете мне это написать.
Я не знаю, что вам нужно написать.
Ответить с цитированием
  #7 (permalink)  
Старый 24.01.2011, 15:12
Интересующийся
Отправить личное сообщение для nel15 Посмотреть профиль Найти все сообщения от nel15
 
Регистрация: 17.10.2010
Сообщений: 13

Кстати, если на область памяти указывает глобальный массив, то эти подмассивы же не должны очищаться в конце тела первой функции?
Ответить с цитированием
  #8 (permalink)  
Старый 24.01.2011, 15:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Нет никаких областей памяти на уровне языка. Объекты не удаляются, пока на них существует хоть одна ссылка.
Ответить с цитированием
  #9 (permalink)  
Старый 24.01.2011, 15:23
Интересующийся
Отправить личное сообщение для nel15 Посмотреть профиль Найти все сообщения от nel15
 
Регистрация: 17.10.2010
Сообщений: 13

Я пишу файловый менеджер, первая функция считывает часть древовидной структуры в виде xml и забивает это в многомерный массив, после чего с помощью второй функции и других функций я хочу работать с этим массивом, канешно, сейчас я могу скачать другие файловые менеджеры, посмотреть как у них там все устроено, но если бы этот маленький пример решился я бы мог все доделать без изменения всего кода
Ответить с цитированием
  #10 (permalink)  
Старый 24.01.2011, 15:25
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищю javascript которые немогу найти...и есть такие вообще?...помогите найти... rashid86 Общие вопросы Javascript 4 08.03.2010 20:22
Помогите найти видео vinnie Общие вопросы Javascript 0 02.03.2010 00:16
Помогите книгу найти по jQuery micscr Оффтопик 4 14.11.2009 00:42
Помогите найти trackbar dert Общие вопросы Javascript 1 28.07.2009 09:40
Помогите найти плагин. kalisha jQuery 4 22.06.2009 17:15