Не понятное поведение при копирование массива
Вроде все просто и понятно, но что то не так и не как не могу понять что
console.log("Уровень " + Number + " загружен");
if (!Levels[Number]) throw "Ошибка: Уровень не найден!";
console.log("Рисование Уровня...");
self.Current = Levels[Number];
self.CurrentMatrix = self.Current.TextureMatrix.slice(0);// вот тут копируется массив
obj_draw = new Draw(self.Current, DrawCallback);// внутри функции идет обращение к свойству CurrentMatrix
на прямую self.Current.TextureMatrix обращения к массиву нет ,обращение только к CurrentMatrix, но исходный массив все равно изменяется, уже час голову ломаю не могу понять почему... |
самое странное, когда я создаю новую переменную и в нее копирую до каких либо действий с массивом все равно записуеться измененный массив...
|
Цитата:
http://javascript.ru/Number |
cyber,
Имхо связано со .slice() Скопируй вначале в переменную, var a = self.Current.TextureMatrix.slice(0); self.CurrentMatrix = a; |
Deff, не помогло=(
|
dmitriymar, спс поправил, но не один браузер не среагировал на эту ошибку...
|
cyber, на понимаю, какой ответ ты хочешь получить, не показывая код функции-конструктора Draw.
|
Цитата:
У тебя в self.Current.TextureMatrix ведь тоже объекты, небось тоже массивы? Их тоже нужно клонировать. |
Мне кажется удачным копировать объекты через Object.create:
var matrix = [[1]];
var matrix_copy = matrix.map(function ( x ){
return Object.create( x );
});
matrix_copy[0][0] = 2;
alert( matrix[0][0], matrix_copy[0][0] );
|
Цитата:
alert( Number ); в самом низу страницы http://sahart.ru/javascript/view_javaruk.php?id=2 Цитата:
|
Цитата:
|
Цитата:
var foo = [[1,2,3],[1,2,3]]; var fii = foo.slice(0); fii[0][0] = 22; console.log(foo[0][0]); У кого есть идеи как это красиво можно обойти без циклов? |
Дзен-трансгуманист,JSON ? :blink:
|
Дзен-трансгуманист,превратить массив в строку , а потом обратно в массив , оригинально , спс.
П.с не сильно ли будет эта операция жрать ресурсы ? |
Дзен-трансгуманист,
Цитата:
вот матрица, и да я забыл упомянуть про вложенный объект )
firstLvl.TextureMatrix = [
[{top: 100, left: 200 }, 4],
[{top: 140, left: 200 }, 2, 2, 2, 2, 2], [{ top: 160, left: 700 }, 5],
[{top: 170, left: 200 }, 2, 2, 6, 2, 2],
[{top: 220, left: 200 }, 2, 2, 2, 2, 2],
[{top: 250, left: 200 }, 2, 1, 1, 1, 1],
[{top: 280, left: 200 }, 2, 1, 1, 1, 1],
];
|
Цитата:
Цитата:
И спс за copy , прикольно сделал) |
Цитата:
it's sadly but it's true Надо тему в оффтопе создать "Английский: вопросы и ответы" :) |
nerv_, зачем?
я думаю большинство тут вполне понимает английский) |
Цитата:
|
Дзен-трансгуманист, я просто его допиливал как мог любыми методами, мне нужно было просто 17 курсачь сдавать)
back up нормального кода сделал как только разберусь с новым алгоритмом для шарика, займусь правкой кода, там много чего нужно привести в порядок, за месяц мой взгляд на этот код сильно изменился) |
Цитата:
|
nerv_, я тоже учу, но нечего сверх сложного тут и не проскакивало)
Цитата:
window.location.reload(); знаю что это жестоко:lol: |
Дзен-трансгуманист,не ну половина кода там вполне нормальна (с моей точки зрения), все что писалось до декабря я оставлю)
|
Цитата:
|
nerv_, cold.
|
Цитата:
Цитата:
|
nerv_,ок, как будет "Я дома" ?
|
cyber, я только учу) Могу предположить I'm home.
|
nerv_, не правильно)
I'm at home Цитата:
|
Дзен-трансгуманист,
не я это правило придумал) |
Цитата:
Начал создавать тему про инглиш в оффтопе, но потом осенило, и понял, почему ты оказался прав случае с металликой. Но, все-таки, мне кажется, ее надо создать :) |
Цитата:
|
Dremlin, уже на писал ответ http://javascript.ru/forum/events/33...tml#post221922
|
| Часовой пояс GMT +3, время: 08:58. |