разница между объявлением и массивом внутри или снаружи forloop в js

#javascript #arrays #for-loop #matrix

Вопрос:

Я пытаюсь создать 2D-массив, но я не знаю его размера, когда объявляю его. когда я пытаюсь добавить в него какое-то значение вне цикла, проблем не возникает, независимо от того, сколько значений я добавляю. Но когда я пытаюсь сделать то же самое внутри цикла for, я не получаю того же результата, у меня в массиве есть несколько пустых мест. Я не понимаю разницы между тем, что я делаю внутри и вне цикла

     let Vs = []
 
let Ts = []
Ts[0] = []
Ts[0][0] = ' test'
Ts[0][1] = ' test1' 
Ts[1] = []
Ts[1][0] = ' test2'
Ts[1][1] = ' test3' 
Ts[2] = []
Ts[2][0] = ' test4'
Ts[2][1] = ' test5' 
console.error('TS : '   Ts)

for (let i = 0; i < 3; i  ) {
    const V = i;
    Vs[i] = []

    Vs[i][i] = V

    let y = i   1
    Vs[i][y] = V
    console.error(Vs)
}
 

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

1. Не могли бы вы уточнить, что вы подразумеваете под добавлением значений ? Как в расширении размера матрицы ?

2. Вне цикла , который вы всегда назначаете [i] , [i][0] и [i][1] . Внутри цикла , который вы назначаете [i] , [i][i] и [i][i 1] . (Голосование за закрытие, поскольку этот простой вопрос подсчета голосов находится на уровне опечатки).

3. Вот и все ! Большое спасибо ^^

Ответ №1:

Я думаю, что вы немного заблудились в своих заданиях в цикле. Может быть, следующее-это больше то, что вы ищете?

 let Vs = [], pre='test';
let Ts = [];
Ts[0] = []
Ts[0][0] = ' test'
Ts[0][1] = ' test1' 
Ts[1] = []
Ts[1][0] = ' test2'
Ts[1][1] = ' test3' 
Ts[2] = []
Ts[2][0] = ' test4'
Ts[2][1] = ' test5' 
console.log('TS:', Ts)

for (let i = 0; i < 3; i  ) {
    const V = 2*i;
    Vs[i] = []
    Vs[i][0] = pre V
    Vs[i][1] = pre (V 1)
}
console.log(Vs) 

Ответ №2:

Хорошо, после просмотра вашего кода, вот почему вы получаете пустые места,

В блоке кода

 for (let i = 0; i < 3; i  ) {
    const V = i;
    Vs[i] = []

    Vs[i][i] = V

    let y = i   1
    Vs[i][y] = V
    console.error(Vs)
}
 

Вы делаете следующее :

Vs[i] = [] создает новую строку в вашей матрице,

А затем вы вставляете значение V в столбец i этой новой строки, что означает, что вы получите пустые места в зависимости от значения i, если i не равно 0, первые индексы этой строки будут пустыми !

Затем вы вставляете значение на одну позицию позже в Vs[i][y], но на следующей итерации вы переходите к новой строке и увеличиваете i, оставляя больше пустых мест в каждой строке…