![]() |
|
||||||||||
|
|||||
|
Регистрация: Dec 2008
Сообщений: 15
|
Всем доброго времени суток!
Есть такая не очень хорошая вещь. Когда я копирую публичный массив aMyArray1 в aMyArray2, с помощью оператора приравнивания: А потом изменяю данные в массиве aMyArray2, то эти изменения отражаются и в первом массиве. В своих проектах я решаю эту проблему следующим образом: function copyArray(aSource:Array):Array { var aTemp:Array = Array(); var nCnt:Number = aSource.length; for (var i = 0; i < nCnt; i++) { if (aSource[i] instanceof Array) { aTemp[i] = copyArray(aSource[i]); } else if (aSource[i] instanceof Object) { aTemp[i] = copyObject(aSource[i]); } else { aTemp.push(aSource[i]); } } return aTemp; } function copyObject(oSource:Object) { var oTemp:Object = {}; for (var i in oSource) { if (oSource[i] instanceof Array) { oTemp[i] = copyArray(oSource[i]); } else { oTemp[i] = oSource[i]; } } return oTemp; } |
|
|||||
|
оО.
Копируете ? Вы создаете ссылку на массив, никакого копирования не происходит. И что это за бред ?.
|
|
|||||
|
Регистрация: Dec 2008
Сообщений: 15
|
спасибо огромное!
Но как быть с объектами? Или, к примеру, с таким случаем: var arr1:Array = Array(1, Object, 3); var arr2:Array = Array(); arr1[1].side = 1; arr2 = arr1.slice(); arr2[1].side = 2; trace("Source obj: " + arr1[1].side); //Выводит Source obj: 2 trace("Exit obj: " + arr2[1].side); //Выводит Exit obj: 2 Неужели нет никакого способа скопировать весь объект, кроме как копировать все свойства объекта по отдельности? |
![]() |
![]() |
Часовой пояс GMT +4, время: 23:10. |
|
|
« Предыдущая тема | Следующая тема » |
|
|