当前位置: 首页 > 面试题库 >

Array.fill(Array)通过引用创建副本,而不是通过值创建副本[duplicate]

邹宏峻
2023-03-14
问题内容

我正在尝试使用创建一个6 x 12矩阵 Array.fill

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.from()代替:

感谢Pranav C Balan在评论中提出的关于进一步改善此问题的建议。

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

原始声明(上面进行了优化):

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


 类似资料:
  • 我正在尝试使用创建一个6乘12的矩阵 虽然这样可以工作,但问题是内部数组实际上都引用了相同的对象。 我希望(并且期望)的值为。 如何强制填充给定参数的按值复制(例如:是我的例子中的参数)而不是按引用复制?

  • 本文向大家介绍svn 通过工作副本创建分支,包括了svn 通过工作副本创建分支的使用技巧和注意事项,需要的朋友参考一下 示例 当使用私有本地工作区(工作副本)与远程中央存储库进行交互时,可以使用存储库相对URL代替直接URL到URL副本来创建新分支:            

  • 我们目前正在M2集群上复制一个名为DatabaseA的数据库。我们正试图通过使用MongoDB Atlas每隔24小时将数据库克隆到一个名为DatabaseB的新数据库中来创建集群的备份。 我们已经研究了以下链接: https://docs.atlas.mongodb.com/api/ 但我们不知道如何实现这一点。 我们应该如何处理这个问题?

  • 当使用电子邮件/密码创建新用户时,是否可能禁用自动登录。 我看到其他人问这个问题与JS和swift有关,但似乎找不到任何具体的android相关信息。我试图实现与这个人一样的事情,但用android 感谢任何帮助

  • 我制作了一个小的Java应用程序,我想把它发送给我的朋友,但是他们无法通过双击来打开文件。他们没有技术知识或经验,因此我无法真正让他们使用任何其他方法来运行应用程序。 当我尝试双击应用程序时,它似乎运行得很好,但是当我尝试运行CMD(使用)时,我遇到了以下错误: 我朋友端的错误也与Java运行时版本有关,所以这可能有某种联系?作为一个初学者,我已经花了相当多的时间在这上面,但还没有能够想出一个解决

  • 问题内容: 我需要通过运行设置服务器的脚本来添加cron作业。我目前正在使用Ubuntu。我可以使用,但这将打开一个编辑器来编辑当前的crontab。我想以编程方式执行此操作。 有可能这样做吗? 问题答案: Cron作业通常存储在每个用户的文件下 您要做的最简单的事情可能就是创建一个配置了作业的文本文件,然后将其复制到cron spool文件夹中,并确保它具有正确的权限(600)。