首页 >web前端 >js教程 >为什么 JavaScript 的 `Array.fill()` 创建引用而不是副本,我该如何修复它?

为什么 JavaScript 的 `Array.fill()` 创建引用而不是副本,我该如何修复它?

Linda Hamilton
Linda Hamilton原创
2024-11-30 09:50:15237浏览

Why Does JavaScript's `Array.fill()` Create References Instead of Copies, and How Can I Fix It?

JavaScript 中的 Array.fill():引用与值的警示故事

Array.fill() 是一种使用的 JavaScript 方法用指定值填充数组。但是,重要的是要了解 Array.fill() 对引用而不是值进行操作。

问题:引用与值

考虑以下代码:

let m = Array(6).fill(Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 1 instead of 0

这里,我们使用 Array.fill() 创建一个 6x12 矩阵。然而,当我们将 m0 设置为 1 时,m1 意外地也变为 1。这是因为 Array.fill() 创建的内部数组都引用同一个 Array 对象。

预期行为:值

我们可能不想引用,而是复制值。换句话说,更改 m0 不应影响 m1。

解决方案:使用 Array.from()

强制 Array.fill() 复制值而不是引用,我们可以使用 Array.from() 如下:

let m = Array.from({length: 6}, e => Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 0 as expected

Array.from() 确保每个内部数组都是不同的

结论

使用 Array.fill() 时,请注意引用和值之间的区别。对于您想要复制值而不是引用的情况,请考虑使用 Array.from() 代替。

以上是为什么 JavaScript 的 `Array.fill()` 创建引用而不是副本,我该如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn