Автор Тема: Не работает скрипт  (Прочитано 4329 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Ilych

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не работает скрипт
« : 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

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #1 : 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

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #2 : 23 Сентября 2004, 13:28:23 »
Спасибо за ответ.
А нумерацию веду с 1 потомучто мне так удобно.

Оффлайн Ilych

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #3 : 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

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #4 : 23 Сентября 2004, 13:43:44 »
Кроме как одномерный ITB[1] массив ничего не хочет

Оффлайн Ilych

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #5 : 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

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #6 : 23 Сентября 2004, 14:57:37 »
Только двухмерные массивы

Оффлайн mike

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #7 : 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

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 11
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #8 : 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

  • ProPerl\'er
  • Старожил
  • ****
  • Сообщений: 435
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Не работает скрипт
« Ответ #9 : 24 Сентября 2004, 12:17:11 »
Оно сейчас практически везде работает ;)
[ основной браузер когда-то был, теперь попробуй разберись =]

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28