javascript - 使用填充方法创建二维数组

标签 javascript arrays

<分区>

我正在尝试使用 fill 函数创建二维数组。它看起来像这样:

let map = new Array(3)
            .fill(new Array(3)
                .fill(0));

当我尝试在特定索引处设置一个值时出现问题:

map[1][1] = 1;

我希望有结果:

[[0, 0, 0],[0, 1, 0],[0, 0, 0]]

但是我收到了这个:

[[0, 1, 0],[0, 1, 0],[0, 1, 0]]

看起来所有这些子数组都引用一个数组,但为什么呢?

最佳答案

问题是 fill(new Array(3)) 首先创建一个新数组,然后用它填充数组,因此每个元素都指向相同的数组引用。当你改变一个时,它会反射(reflect)在所有的人身上。

您可以对外部数组使用 Array.from(),它接受一个函数。这将允许您为每个数组创建一个新数组:

let map = Array.from(Array(3), () => new Array(3).fill(0)) 

map[1][1] = 1;
console.log(map)

这里它将为每个元素调用该函数,确保为每个元素创建一个唯一的数组。

关于javascript - 使用填充方法创建二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51013653/

相关文章:

c - 在 C 形式标准输入中使用 scanf() 读取多行整数

javascript - 如何控制合适的iframe?

javascript - 如何有效地将 json 转换为缩进文本树?

javascript - Angular-fullstack 生成器生产应用程序无法正确服务于 socket.io?

javascript - 数组是关联的还是索引的?

ios - 如何从嵌入在 Swift 中的 UITableView 中的文本字段中检索数据?

arrays - 无法将数组类型查询字符串解析为对象列表

python - SQLite 跨具有重复分组行的多列进行 SELECT 查询

javascript - 数据表对损坏的子行进行排序

javascript - casperjs:显示调试信息输出的正确方法