Изменение 2d-массива с помощью оператора распространения работает, но добавляет новый элемент в конец массива - PullRequest
0 голосов
/ 09 ноября 2019

Я работаю над созданием простой версии игры жизни Конвея в ReactJS.

Я хочу изменить массив значений 2d и вернуть новый массив значений с одним измененным элементом.

У меня сформирован массив 2D и сохранен как состояние, подобное этому

const colArr = Array(HEIGHT).fill(0);
const rowArr = Array(WIDTH).fill(0);
const boardArr = colArr.map(columns => rowArr.map(rows => 0));

...

const [boardState, setBoardState] = useState(boardArr);

При нажатии я хочу вернуть новый массив с конкретным значением, измененным на 1. Однако, когда я пытаюсь это сделать

setBoardState([...boardState, boardState[x][y] = 1])

Массив изменяется, как я хочу, но он также добавляет 1 в конце следующим образом:

[ [1, 0, 0],
[0, 0, 0],
[0, 0, 0], 1],

В настоящее время это работает, если я использую .slice (), чтобы удалить последний элемент, но я не могу понять, почему этот элемент модифицируетвложенный массив и добавление в конец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...