Forum Webscript.Ru
Программирование => JavaScript & JScript => Тема начата: 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]\'
а во второй \'Разное из снятого мной\'
не пойму в чем проблема
-
Причина в некорректном понимании многомерных массивов в 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.
-
Спасибо за ответ.
А нумерацию веду с 1 потомучто мне так удобно.
-
Поправил на
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 или не является объектом
-
Кроме как одномерный ITB[1] массив ничего не хочет
-
В одном примепе увидел:
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:
А нумерацию веду с 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\';
-
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
-
Оно сейчас практически везде работает ;)