как сбросить значение в 2D-массиве в javascript

#javascript #arrays

#javascript #массивы

Вопрос:

Я действительно смущен этим 2D-массивом.

Например:

 let arr = Array(2)
arr.fill(Array(2))

arr[0][0]=1
 

И результатом arr является [1,empty][1,empty]

Почему это так? Я просто хочу, чтобы первый элемент в первом массиве был установлен как 1

Комментарии:

1. Проблема заключается в arr.fill подробнее о fill методе w3schools.com/jsref/jsref_fill.asp

Ответ №1:

Потому что вы используете 1 экземпляр массива для заполнения первого массива (arr). Таким образом, arr[0] и arr[1] на самом деле являются одним и тем же экземпляром, они указывают на один и тот же адрес. Если вы хотите заполнить свой массив arr новыми массивами, выполните цикл над первым массивом arr, а затем назначьте им новый массив.

 const arr = Array(2);

for (let i = 0; i < arr.length; i  ) {
    arr[i] = Array(2);
}

arr[0][0] = 1;
 

Ответ №2:

Массив (2) — это пустой массив, который копируется в каждый элемент arr.

Но все копии массива (2) являются глубокими копиями.

Таким образом, изменения в одной из глубоких копий будут отражены во всех копиях массива (2).

 let arr = Array(2)
arr.fill(Array(2))

arr[0][0]= 1
// [ [ 1, <1 empty item> ], [ 1, <1 empty item> ] ]

arr[0][1] = 2
// [ [ 1, 2 ], [ 1, 2 ] ] 

Ответ №3:

В документе говорится…

Значение для заполнения массива. (Обратите внимание, что все элементы в массиве будут иметь это точное значение.)

Это означает, что они имеют один и тот же адрес в памяти.

Вам нужен другой подход для заполнения вашего массива..

 let arr = Array.from({length: 2}, e => Array(2))

arr[0][0]=1

console.log(arr);