У меня есть очень простой вложенный цикл для заполнения 2-мерного массива (смысл в том, чтобы заполнить таблицу значениями условно). Результаты более чем неожиданны, и я не могу увидеть или найти свою ошибку.
Я не понимаю, почему все массивы заполнены (таблицы [0] и [1] должны быть пустыми, циклы начинаются только с2) и почему все заполнены одинаково. Файл console.log во внутреннем if показал, что эта часть кода выполняется только тогда, когда она должна, и выдает ожидаемый результат, что означает, что присваивание происходит только с теми, которые проверены как правильные значения. Еще до того, как внутренний цикл для R + 1 даже запущен, таблица [R + 1] уже заполнена содержимым таблицы [R].
По сути (отладка console.log) ошибочно заполненные поля никогда не присваиваются моим кодом, но заполняются. Также перезаписывает другие значения.
Наблюдается в Node.js и консоли Chrome, не пробовал другие среды выполнения.
Код:
const table = (new Array(7)).fill(new Array(7));
for (let R = 2; R <= 6; R++) {
for (let N = 2; N <= 6; N++) {
if (R + N <= 8) {
table[R][N] = '' + R + N;
}
}
}
ожидаемый результат:
[
[ , , , , , , ],
[ , , , , , , ],
[ , , '22', '23', '24', '25', '26' ],
[ , , '32', '33', '34', '35', ],
[ , , '42', '43', '44', , ],
[ , , '52', '53', , , ],
[ , , '62', , , , ]
]
Фактический результат:
[
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
[ , , '62', '53', '44', '35', '26' ],
]