Forum Webscript.Ru

Программирование => JavaScript & JScript => Тема начата: Ilych от 23 Сентября 2004, 11:41:02

Название: Не работает скрипт
Отправлено: Ilych от 23 Сентября 2004, 11:41:02
ITT = new Array(1);
ITB = new Array(10,10);
ITA = new Array(10,10);
ITT[1]=\'Встреча одноклассников\';
ITB[1,1]=\'Встреча одноклассников в кафе [24.12.2000]\';
ITA[1,1]==\'paty2412\';

ITB[1,2]=\'-\';

alert(ITB[1,1]);

ITT[2]=\'Разное из снятого мной\';
ITB[2,1]=\'Разное из снятого мной\';
ITA[2,1]=\'gallery1\';

ITB[2,2]=\'К В Н [лето 2002 год]\';
ITA[2,2]=\'kvn\';

ITB[2,3]=\'-\';
alert(ITB[1,1]);

В первый раз Alert выдает \'Встреча одноклассников в кафе [24.12.2000]\'

а во второй \'Разное из снятого мной\'

не пойму в чем проблема
Название: Не работает скрипт
Отправлено: mike от 23 Сентября 2004, 13:25:02
Причина в некорректном понимании многомерных массивов в JS. Конструктор массива может принимать одно значение как число элементов или набор значений как перечисление элементов массива. В new Array(10,10) создается массив из двух элементов, а не двумерный массив.

После этого, при
ITB[1,1]=\'Встреча одноклассников в кафе [24.12.2000]\';
вначале вычисляется значение выражения
1,1,
которое равно 1, а потом строковое значение присваивается второму элементу массива ITB, т.е. физически строка принимает вид
ITB[1]=\'Встреча одноклассников в кафе [24.12.2000]\';

Аналогично при втором присваивании: результатом вычисления выражения 2,1 будет также единица.

Для того, чтобы это это заработало, нужно поправить код где-то так:
ITT = new Array(1);
ITB = new Array(10);
ITA = new Array(10);
ITT[1]=\'Встреча одноклассников\';

ITB[1] = new Array(10);
ITA[1] = new Array(10);
ITB[1][1]=\'Встреча одноклассников в кафе [24.12.2000]\';
ITA[1][1]==\'paty2412\';

ITB[1][2]=\'-\';

alert(ITB[1][1]);


ЗЫ. Нумерация элементов массива в JS идет с 0 а не с 1.
Название: Не работает скрипт
Отправлено: Ilych от 23 Сентября 2004, 13:28:23
Спасибо за ответ.
А нумерацию веду с 1 потомучто мне так удобно.
Название: Не работает скрипт
Отправлено: Ilych от 23 Сентября 2004, 13:41:53
Поправил на

ITT = new Array(10);
ITB = new Array(10);
ITA = new Array(10);
ITT[1]=\'qwqwqwq\';
ITB[1][1][2]=\'paty2412\'

Ругается Опера:
Inline script thread
Error:
name: TypeError
message: Statement on line 8: Expression evaluated to null or undefined and is not convertible to Object: ITB[1]
Backtrace:
  Line 8 of inline#2 script in file://localhost/C:/Common/Новая%20папка/БезИмени.htm
    ITB[1][1][2] = "paty2412";

ИЕ6 ругается:
"ITB.1.1"- есть null или не является объектом
Название: Не работает скрипт
Отправлено: Ilych от 23 Сентября 2004, 13:43:44
Кроме как одномерный ITB[1] массив ничего не хочет
Название: Не работает скрипт
Отправлено: Ilych от 23 Сентября 2004, 13:46:39
В одном примепе увидел:
a = new Array(4)
for (i=0; i < 4; i++) {
   a = new Array(4)
   for (j=0; j < 4; j++) {
      a[j] = "["+i+","+j+"]"
   }
Название: Не работает скрипт
Отправлено: Ilych от 23 Сентября 2004, 14:57:37
Только двухмерные массивы
Название: Не работает скрипт
Отправлено: mike от 23 Сентября 2004, 15:32:34
Цитировать
Ilych:
А нумерацию веду с 1 потомучто мне так удобно.

Тогда учти, что размер твоих массивов будет не N a N+1. Например, ITT, который в примере имеет размер = 1 после присваивания типа ITT[1] = \'-\' будет иметь размер = 2.


Цитировать
Ilych:
ITB[1][1][2]=\'paty2412\'

У тебя ITB[1][1] еще не определен. Нужно
ITB[1][1] = new Array(10);
ITB[1][1][2]=\'paty2412\';
Название: Не работает скрипт
Отправлено: Ilych от 24 Сентября 2004, 10:03:11
ITB=[
       [
         [\'Встреча одноклассников\',\'paty2412\']
       ],
       [
         [\'Разное из снятого мной\',\'gallery1\'],
         [\'К В Н [лето 2002 год]\',\'kvn\']                          
       ]
    ];
Можно не объявлять new array()
получаем:
ITB[0][0][0] = \'Встреча одноклассников\'
ITB[0][0][1] =\'paty2412\'
ITB[1][0][0] =\'Разное из снятого мной\'
ITB[1][0][1] =\'gallery1\'
ITB[1][1][0] =\'К В Н [лето 2002 год]\'
ITB[1][1][1] =\'kvn\'

Работает в ИЕ6 и Опере 7.54
Название: Не работает скрипт
Отправлено: mike от 24 Сентября 2004, 12:17:11
Оно сейчас практически везде работает ;)