当前位置: 首页 > 知识库问答 >
问题:

Array.fill(数组)按引用而不是按值[duplicate]创建副本

南门朗
2023-03-14

我正在尝试使用array.fill创建一个6乘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)是我的例子中的参数)而不是按引用复制?

共有1个答案

何乐
2023-03-14

您可以改用array.from():

感谢pranav C balan在评论中提出了进一步改进的建议。

null

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

m[0][0] = 1;
console.log(m[0][0]); // Expecting 1
console.log(m[0][1]); // Expecting 0
console.log(m[1][0]); // Expecting 0
 类似资料:
  • 问题内容: 我正在尝试使用创建一个6 x 12矩阵 虽然这样做有效,但问题是内部数组实际上都引用同一对象。 我想(和预期)的值是。 如何强制填充给定参数的按值复制(例如,在我的情况下该参数)而不是按引用复制? 问题答案: 您可以使用Array.from()代替: 感谢在评论中提出的关于进一步改善此问题的建议。 原始声明(上面进行了优化):

  • 数组在Java中不是一种基元类型,但它们也不是对象,那么它们是通过值传递还是通过引用传递呢?它是否取决于数组包含什么,例如引用或基元类型?

  • 问题内容: 让我们举个例子 我想在列表中附加值,但列表的值也已更改。 我想我不知道为什么会这样(python通过引用传递列表)。 我的问题是“如何通过值传递它,以使添加不会更改中的值?” 问题答案:

  • 问题内容: 我正在寻找一些关于JavaScript何时按值传递值,何时按引用传递,何时修改传递的项目影响函数外部值以及何时不传递值的良好综合阅读材料。我还对何时通过引用与按值分配给另一个变量以及是否遵循除作为函数参数传递以外的任何其他规则进行分配感兴趣。 我已经进行了很多搜索,找到了很多具体的示例(其中很多都在SO上),可以从这些示例中整理出一些真实的规则,但是我还没有找到一个写得很好的文档来描述

  • 问题内容: 数组不是Java中的原始类型,但它们也不是对象,因此它们是按值还是按引用传递?它是否取决于数组包含的内容,例如引用或原始类型? 问题答案: 。如果是Array(只不过是Object),则数组引用按值传递。(就像对象引用按值传递)。 当你将数组传递给其他方法时,实际上是复制对该数组的引用。 通过该引用对数组内容进行的任何更改都会影响原始数组。 但是,将引用更改为指向新数组不会更改原始方法

  • 下面是一个实现: 下面是一个示例用法来检查可操作性: