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. Заполняю ли я массив заранее или нет, не имеет значения.
Где неудача в моем понимании?