Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > Динамический массив


Автор: Alexandr507 23.12.2009, 18:32
Интересует такой вопрос. Насколько я понял непосредственно динамического массива в JS нет, но наверняка существует способ  объявлять двумерный  допустим массив,   где один индекс изначально известен, а второй получается путем какого либо условия.
 
Написал такой код который вызвал ошибку в строке 13 - "Длина массива должна быть положительным конечным числом"

        
Код

var size2 = Number(4);
    var stroka = forma.x1.value;

    var arr = new Array();
    arr = stroka.split("");
    var len = arr.length;
    
    var size1 = Number(len / size2);
    if(len%size2 != 0) {++size1;}
    var all = Number(size1 * size2);


    var mas = new Array(size1);
    for(var i=0; i<size1; i++)
    {
        mas[i] = new Array(size2);
    }


Автор: bars80080 23.12.2009, 18:52
так проверь, что там у тебя в size1

alert(size1);

плюс, mas[i] = new Array(size2); возможно не прокатит, но зато прокатит mas[i] = [];

тут как бы надо понимать, что массив в javascript вещь не постоянная, его можно расширять и укорачивать когда вздумается. поэтому задание предела, особого смысла не имеет

Автор: IDVsbruck 24.12.2009, 12:07
Цитата(Alexandr507 @  23.12.2009,  18:32 Найти цитируемый пост)
Насколько я понял непосредственно динамического массива в JS нет

Один из самых динамических массивов, которые существуют в языках программирования. Что-то меня гложат сомнения, что под словом "динамический" ты имеешь в виду другое значение ...

Автор: Rimch 25.12.2009, 14:33
Alexandr507,  для чего вам нужен динамический массив?
Напишите конкретную задачу.

Автор: Alexandr507 25.12.2009, 20:09
Уже разобрался. переменная size1, которая является одной из размерностью массива, принимала не целочисленное значение  и из за этого и была ошибка. Привык в С++ где каждая переменная  строго типизирована, и при присвоении 
Код

 int size1 = len / size2;

  в случае если результат деления len на size2  - дробь, то  целочисленная переменная size1 просто отсекает дробную часть.

В случае 
Код

 var size1 = Number(len / size2);


Дробная часть не отсекается, так size1 не имеет конкретный тип "целое число".

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

Автор: IDVsbruck 26.12.2009, 01:21
Можно и вовсе не использовать размерность, а просто добавлять элементы, к примеру, функцией .push(value).
А массивы в js и вовсе могут быть "красивыми", к примеру:
var arr = [
[1],
['q', 0, "qwerty"],
[],
[3.14, null, 45, "asdfgh"]
]
Причем, обращения arr[0, 1] или arr[2, 0] или arr[1, 3] ошибочны, хотя, казалось бы, массив имеет размерность 4х4. Именно такие "фичи" делают этот странный язык таким гибким smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)