Array.prototype.fill () diferente do preenchimento enquanto eu vou

Estou trabalhando em um problema que gera seus resultados em uma matriz 2D, adicionando um a cada elemento à medida que avança.

I simplificou o código o mais longe possível para criar um caso de teste. Se eu preencher a matriz como eu vou, da seguinte maneira:

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; 
    }
}

Eu recebo uma matriz 2D onde todos os valores são 1. No entanto, se eu pré-preencher a matriz usando array.prototype.fill () da seguinte maneira:

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; 
    }
}

Eu recebo uma matriz 2D cheia de 6s. Mesmo se eu substituira[d1][d2] += 1 com o velhoa[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1;, (que ainda deve funcionar, já que 0 e indefinido são falsos) ainda recebo 6s.

Até onde eu sei, meu código deve apenas percorrer cada elemento e adicionar um ao valor anterior. Ele não deve tocar em nenhum elemento mais de uma vez, portanto todos devem ser 1s. Se eu preencho a matriz antes do tempo ou não, não importa.

Onde está o fracasso no meu entendimento?

questionAnswers(1)

yourAnswerToTheQuestion