Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопросы по Javascript. (https://javascript.ru/forum/misc/45653-voprosy-po-javascript.html)

koderman 10.03.2014 12:15

Вопросы по Javascript.
 
Многомерный массив.
Почему не присваивается число к array[1][1] = 5; Вроде правильно всё?

var array = new Array(10);
for(var i = 0; i < array.length; i++)
{array[i] = new Array(10);}

array[1] = 3;
array[1][1] = 5;


alert(array[1][1]);

рони 10.03.2014 12:27

Цитата:

Сообщение от koderman
array[1] = 3;

это типа убьём массив ? а потом попытемся в него что-то записать
var array = new Array(10);
    for (var i = 0; i < array.length; i++) {
        array[i] = new Array(10);
    }
    array[1] = 3;
    alert(JSON.stringify(array));

Aetae 10.03.2014 12:32

Потому что это на самом деле массив массивов, и делая так
array[1] = 3;
Вы на самом деле заменяете массив под номером 1 на число, и в итоге
array[1][1] = 5;
~
3[1] = 5;
что, естесно, бред.


Если очень хочется - можно применить хак:
function toString(){ return this.value+'' }
function toInt(){ return parseInt(this.value,10) }

var array = new Array(10);
for(var i = 0; i < array.length; i++)
{array[i] = new Array(10);}

array[1].value = 3;
array[1].toString = toString;
array[1].valueOf = toInt;

array[1][1] = 5;

alert(array[1]);
alert(array[1][1]);
но лучше придумать что-нибудь другое.

koderman 10.03.2014 12:34

Я так думал что по адресу array[1] будет находиться 3. А по адресу array[1][1] будет находиться 5.
Так?

Aetae 10.03.2014 12:38

Не так.
var array = new Array(10);
// array = [,,,,,,,,,,]
for(var i = 0; i < array.length; i++)
{array[i] = new Array(10);}
/* 
array = 
[
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,]
]
*/

array[1] = 3;
/*
array = 
[
	[,,,,,,,,,,],
	3,
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,],
	[,,,,,,,,,,]
]
*/
array[1][1] = 5;
/*
error 
*/

koderman 10.03.2014 12:57

Здесь сделано по такому принципу и всё работает.
Сначала такому типу массива присваиваются данные array[]
А потом такому array[][]
Это таблица умножения.


var array = new Array(10);

for(var i = 0; i < array.length; i++)
{array[i] = new Array(10);}

for(var j = 0; j < array.length; j++) {
	for(var n = 0; n < array[j].length; n++){
		array[j][n] = j*n;
				}}
		alert(array[8][5]);

koderman 10.03.2014 13:05

Цитата:

Сообщение от Aetae (Сообщение 301972)
и делая так
array[1] = 3;

Вы на самом деле заменяете массив под номером 1 на число, и в итоге
array[1][1] = 5;
~
3[1] = 5;
что, естесно, бред.




Неправда. Ничего не заменяется.

var array = new Array(10);
for(var i = 0; i < array.length; i++)
{array[i] = new Array(10);}


array[1]= 3;
array[2] =5;
array[3] =7;
alert(array[1]);
alert(array[2]);
alert(array[3]);

Aetae 10.03.2014 13:12

Цитата:

Сообщение от koderman (Сообщение 301978)
Неправда. Ничего не заменяется.


koderman 10.03.2014 13:14

Как объяснили так я и понял.
Сказали что заменяет. Я так и понял что заменяет. Проверил, не заменяет на самом деле.#
Вы объясняете также как врач пишет.
Легче уже википедию читать в самом деле.

koderman 10.03.2014 13:24

Как правильно говорится: в светлой голове светлые мысли.
Картинки ещё постит. Советовал бы я вам потренироваться в излагании мыслей.
Билебирду понапишут и хотят чтобы их поняли. Да ещё смеют критиковать курсы которые я смотрю.


Часовой пояс GMT +3, время: 13:08.