【发布时间】:2023-01-30 20:57:49
【问题描述】:
我正在尝试使用 Array.fill 创建一个 6 x 12 矩阵
let m = Array(6).fill(Array(12).fill(0));
虽然这有效,但问题是内部数组实际上都引用同一个 Array 对象。
let m = Array(6).fill(Array(12).fill(0));
m[0][0] = 1;
console.log(m[1][0]); // Outputs 1 instead of 0
我希望(并期望)m[1][0] 的值为0。
我如何强制Array.fill 填充给定参数的按值复制(例如:Array(12).fill(0) 是我的参数)而不是按引用复制?
【问题讨论】:
-
你不能强迫
Array.fill()做它已经做的以外的任何事情。您当然可以编写自己的函数来执行此操作。 -
@Pointy 你是对的,填充“深层复制”的第二个参数会很有用:)
-
能够传递某种生成器函数可能会很好。
-
使用 lodashes 深度克隆,它会删除引用
-
@WilliamKunkel:在大多数用例中,您可以简单地执行
Array.from(generator)而不是Array(6).fillBy(generator, 0, 6)
标签: javascript reference ecmascript-6