Member 14719507 Ответов: 3

Новый массив влияет на старый массив, даже если я скопировал его и не использовал тот же рефренс


Эй , ребята, у вас есть этот странный жучок,
Я создал новый массив из существующего массива,
однако когда я обновляю объекты в указанном скопированном массиве,
объекты в исходном массиве также обновляются,
ссылка не должна быть такой же поэтому я понятия не имею почему это происходит
массив currentShape-это массив, содержащий в общей сложности 4 объекта

код:
function checkKey(e) {
  nextShape = [...currentShape];
  e.preventDefault();
  e = e || window.event;
  if (e.keyCode === 40) {
    direction = "down";
    nextShape.forEach(cell => cell.i++);
  drawShape();
}

drawShape не имеет значения, так как он уже получает модифицированный массив, который не является тем, что он должен получить,

Что я уже пробовал:

попробовал использовать slice,map для создания нового массива, тот же эффект

Gerry Schmitz

"Копирование" - это не то же самое, что "клонирование". При копировании создаются ссылки на существующие объекты. Клонирование создает новые объекты с их собственными ссылками.

Richard Deeming

Вы отметили этот вопрос как "Java", но ваш код, похоже, является "Javascript".

Несмотря на схожие названия, это два совершенно разных языка.

3 Ответов

Рейтинг:
2
Рейтинг:
2

Patrice T

Цитата:
Новый массив влияет на старый массив, даже если я скопировал его и не использовал тот же рефренс

Эмпирическое правило: в управляемых языках все, что не является универсальным типом (строки, массивы, объекты), копируется по ссылке, если вы не указываете иное.


Рейтинг:
1

MadMyche

То, что вы видите, является примером Назначение Переменных, что в основном говорит о том, что эти 2 переменные равны.
То, что я думаю, что вы хотите сделать, это использовать clone() метод, который создаст новую переменную и продублирует значения из старой переменной.

Ссылка:
Копирование массива в Java[^]