#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);