Array.prototype.fill () отличается от fill на ходу

Я работаю над проблемой, которая выводит свои результаты в двумерный массив, добавляя по одному к каждому элементу.

I упростили код вниз, насколько я мог, чтобы создать контрольный пример. Если я заполняю массив как я иду, следующим образом:

var a = [[], [], [] ,[] ,[], []];
var d1, d2;
for (d1 = 0; d1 < 6; d1++) {
    for (d2 = 0; d2 < 6; d2++) {
        a[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1; 
    }
}

Я получаю 2D-массив, в котором все значения равны 1. Однако, если я предварительно заполню массив с помощью array.prototype.fill () следующим образом:

var a = new Array(6).fill(new Array(6).fill(0));
var d1, d2;
for (d1 = 0; d1 < 6; d1++) {
    for (d2 = 0; d2 < 6; d2++) {
        a[d1][d2] += 1; 
    }
}

Я получаю 2D массив, полный 6 с. Даже если я заменюa[d1][d2] += 1 со старымa[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1;, (который все еще должен работать, так как 0 и неопределенный являются ложными) Я все еще получаю 6s.

Насколько я могу судить, мой код должен просто проходить через каждый элемент и добавлять один к предыдущему значению. Ни один элемент не должен касаться более одного раза, поэтому все они должны быть равны 1. Заполняю ли я массив заранее или нет, не имеет значения.

Где неудача в моем понимании?

Ответы на вопрос(1)

Ваш ответ на вопрос