Вход

Просмотр полной версии : Проблема с массивом объектов.


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
Во всём.
Каждый раз делаете новый массив - 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
На массив a.

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