@Mazino

Почему 2х мерный созданный через new Array() при перезаписи ячейки перезаписывает все элементы в колонке?

const array = new Array(3).fill(new Array(3).fill(false))
/*
 * array =
 * [[false,false,false],
 * [false,false,false],
 * [false,false,false]]
 */

Если перезаписать элемент [0][0]
array[0][0] = !array[0][0]
То на выходе массив будет выглядеть так:
/*
*[[true,false,false],
*[true,false,false],
*[true,false,false]]
*/

т.е перезаписывается весь столбец по второму индексу. Почему?
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
v3shin
@v3shin
Веб-шаман
new Array(3).fill(false) создает массив. new Array(3).fill(массив) создает родительский массив, в качестве значений которого использует один и тот же массив. Получаются три ссылки на один объект.
const array = new Array(3).fill('').map(() => new Array(3).fill(false))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы