Просмотр полной версии : Проблема с массивом объектов.
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 у последнего массива
Теперь сделайте выводы.
Во всём.
Каждый раз делаете новый массив - array_of_marker = new Array()
Добавляете ему в конец новый объект array_of_marker.push(new Object())
Индексу массива - j - присваиваете новый объект со свойством id и значением 10
Показываете id индекса 0 у последнего массива
Теперь сделайте выводы.
А блин, я дурак, че-то в 5 утра башка не варит совсем, создание массива конечно за цикл вынести.:D
А в остальном все верно, все как мне надо было. "Вталкиваю" новый объект в массив, потом элементу массива с индексом j, то есть объекту добавляю свойство id равно 10.
Ну блаодарю:thanks:
Вы не добавляете свойство id, вы на месте только что впихнутого объекта ставите другой у которого есть свойство id. То есть вторая строка вообще лишняя или третья строка должна выглядить так array_of_marker[j].id = 10; В последней тоже, похоже, опечатка. Вместо 0 должен быть j.
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 понимает что его нужно удалить? из памяти? Когда на массив нет ни одного указателя?
Ну да. Разумеется с учётом косвенных указателей, типа у вас есть указатель на объект, одно из свойств которого указывает на другой объект и т.п. Всё до чего нельзя добраться по таким вот цепочкам указателей будет удалено при следующем прохоже сборщика-мусора. Когда именно будет этот проход точно сказать невозможно. Обычно при нехватке памяти выделенной процессу.
Таким образом, указатель на массив b теряется На массив a.
На массив a.
Ну да, конечно же на а.)
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot