Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблема с массивом объектов. (https://javascript.ru/forum/misc/9141-problema-s-massivom-obektov.html)

bayah 30.04.2010 22:19

Проблема с массивом объектов.
 
for(var j=0; j<3; j++){

		array_of_marker = new Array()
		array_of_marker.push(new Object())
		array_of_marker[j]={id: 10} 

		alert(array_of_marker[0]['id'])
	}


Три раза должно появиться сообщение с цифрой 10. А получаю:
10, undefined, undefined.

Где я ошибаюсь?

Nekromancer 30.04.2010 22:29

Во всём.
Каждый раз делаете новый массив - array_of_marker = new Array()
Добавляете ему в конец новый объект array_of_marker.push(new Object())
Индексу массива - j - присваиваете новый объект со свойством id и значением 10
Показываете id индекса 0 у последнего массива

Теперь сделайте выводы.

bayah 01.05.2010 08:00

Цитата:

Сообщение от Nekromancer (Сообщение 53803)
Во всём.
Каждый раз делаете новый массив - array_of_marker = new Array()
Добавляете ему в конец новый объект array_of_marker.push(new Object())
Индексу массива - j - присваиваете новый объект со свойством id и значением 10
Показываете id индекса 0 у последнего массива

Теперь сделайте выводы.

А блин, я дурак, че-то в 5 утра башка не варит совсем, создание массива конечно за цикл вынести.:D

А в остальном все верно, все как мне надо было. "Вталкиваю" новый объект в массив, потом элементу массива с индексом j, то есть объекту добавляю свойство id равно 10.

Ну блаодарю:thanks:

Kfuse 01.05.2010 12:18

Вы не добавляете свойство id, вы на месте только что впихнутого объекта ставите другой у которого есть свойство id. То есть вторая строка вообще лишняя или третья строка должна выглядить так array_of_marker[j].id = 10; В последней тоже, похоже, опечатка. Вместо 0 должен быть j.

bayah 01.05.2010 16:58

Kfuse,
А, ну да, точно...
Опять лажаю)
А с 0 - это просто для примера.

Раз уж о массивах заговорил то еще у меня такой вопрос:
Создаю два массива
var a = new Array()
var b = new Array()

В коде они используются так:
- Сначала формируется массив a.
- Начинается цикл
- По массиву а создается массив b.
- В конце цикла делаю так:

a = b
b = new Array()

- Далее к следующей итерации цикла.

Таким образом, указатель на массив b теряется при каждой итерации и каждый раз создается новый массив b в памяти.

В учебнике(http://javascript.ru/basic/array) прочитал:

Цитата:

Javascript автоматически очищает память, как и Java, в отличие от C/C++, поэтому вы можете присвоить переменной новый массив:

arr = [ ]
При этом старый объект-массив будет удален в процессе "сборки мусора".
Так а когда именно происходит очистка, то есть освобождение памяти под тот самый массив b? И как javascript понимает что его нужно удалить? из памяти? Когда на массив нет ни одного указателя?

Kfuse 01.05.2010 18:32

Ну да. Разумеется с учётом косвенных указателей, типа у вас есть указатель на объект, одно из свойств которого указывает на другой объект и т.п. Всё до чего нельзя добраться по таким вот цепочкам указателей будет удалено при следующем прохоже сборщика-мусора. Когда именно будет этот проход точно сказать невозможно. Обычно при нехватке памяти выделенной процессу.

Цитата:

Таким образом, указатель на массив b теряется
На массив a.

bayah 01.05.2010 18:57

Цитата:

Сообщение от Kfuse (Сообщение 53888)
На массив a.

Ну да, конечно же на а.)


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