проблема с элементами массива
добрый вечер... столкнулся я с проблемой, о которой вобщем даже писать смешно.... вот есть у меня такой участок кода
i= 0; for(var iHero= 0; iHero<Heroes.length; iHero++) { for(iUnit= 0; iUnit<Heroes[iHero].heroUnit.length; iUnit++) { // создадим запись в таблице Units Units[i]= new Array(); Units[i]= UnitsTable[Heroes[iHero].heroUnit[iUnit]]; // добавим id героя-хозяина Units[i].heroID= iHero; Units[i].coord= new Array(); // обяъвим массив координат клетки юнита Units[i].coord.left= -1; // x- координата Units[i].coord.top= -1; // y- координата // вместо id заготовки юнита в таблицу Heroes впишем id созданного юнита Heroes[iHero].heroUnit[iUnit]= i; i++; } } здесь из таблицы UnitsTable, где хранятся шаблоны юнитов, выбирается нужный и всталяется в таблицу Units, а id этой записи заносится в массив юнитов героя и всё бы ничего, но есть одна загвоздка, измение какогонибудь поля в строке любого элемента, почемуто меняет все остальные, в которых поле unitID совпадает напрмер есть такой участок кода Units[1].coord.left= 220; после этого поле coord.left становится равным 220 у всех элементов, у которых поле unitID== Units[1].unitID хотя unitID является по сути просто указателем на тип юнита, и никак не связана я идентификацией элементов я часа два бился над этой проблемой, так и не смог решить её... надеюсь только на вашу помощь |
приведённый кусо кода верный. Ошибка где-то в другом месте.
|
С объектами такой способ не прокатывает, если пишешь
obj=new my_obj(); то создается объект, после obj2 = obj; не создается новый объект, а просто создается новая ссылка на уже существующий объект. obj2 и obj по сути будут являться одним и тем же. Для получения желаемого результата нужно создавать копию объекта. |
sectus
Спасибо огромное, все решил.. сделал вот такую вот простенькую функцию function createCopy(obj) { if(obj instanceof Array) { newObj= new Array(); for(prop in obj) { newObj[prop]= createCopy(obj[prop]) } return newObj; } return obj; } и теперь всё отлично работает! |
Часовой пояс GMT +3, время: 21:11. |