<分区>
我正在研究一个将结果输出到二维数组的问题,并在每个元素中添加一个。
我尽可能地简化了代码以创建一个测试用例。如果我边走边填充数组,如下所示:
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;
}
}
我得到一个二维数组,其中所有值都是 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;
}
}
我得到一个全是 6 的二维数组。即使我将 a[d1][d2] += 1
替换为旧的 a[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1;
,(应该仍然有效,因为 0 和 undefined 都是假的)我仍然得到 6s。
据我所知,我的代码应该只是循环遍历每个元素并将前一个值加一。它不应多次接触任何元素,因此它们都应为 1。我是否提前填充数组应该无关紧要。
我的理解哪里出了问题?