【发布时间】:2016-04-19 00:50:19
【问题描述】:
我正在研究一个将其结果输出到二维数组中的问题,并在每个元素中添加一个。
我尽可能简化代码以创建测试用例。如果我按我去填充数组,如下所示:
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;
}
}
我得到一个充满 6s 的二维数组。即使我用旧的a[d1][d2] = (a[d1][d2]) ? (a[d1][d2]) + 1 : 1; 替换a[d1][d2] += 1,(它应该仍然有效,因为 0 和 undefined 都是假的)我仍然得到 6s。
据我所知,我的代码应该只是循环遍历每个元素并在前一个值上加一个。它不应该多次接触任何元素,所以它们都应该是 1。我是否提前填充数组并不重要。
我理解的失败在哪里?
【问题讨论】:
-
小测验:
new Array(6).fill(new Array(6).fill(0));行创建了多少个新数组对象? (提示:它与出现在行中的new Array调用的数量相同。)(提示 #2:小于 7:)。)
标签: javascript arrays