【发布时间】:2020-02-27 11:23:55
【问题描述】:
尝试使用 Javascript 实例化数组的不同方法,我注意到一些有趣的行为:
matrix = Array(3).fill(Array(3).fill(0))
创建一个包含 0 个值的 NxN 矩阵
[
[0,0,0],
[0,0,0],
[0,0,0]
]
然后我尝试将矩阵的第一行更改为全 1:
matrix[0].fill(1)
由于某种原因,将矩阵中的所有值都变为 1:
[
[1,1,1],
[1,1,1],
[1,1,1]
]
这种行为对我来说没有意义。对 Array.fill 的最终调用不应该只影响第一行吗?这是怎么回事?
【问题讨论】:
-
一定是内部数组都一样吧?
matrix[0] === matrix[1]必须等于 true。 -
因为您正在使用对同一数组的引用填充数组 3 次 - 请尝试使用
matrix = Array.from({length:3}, () => Array(3).fill(0))代替 - 每次调用Array(3).fill(0),为每一行创建一个新数组
标签: javascript arrays