js二维数组初始化问题

js二维数组初始化问题js二维数组初始化引发的问题,作为一名‘懒惰’的程序员,自然是不可能用两个for循环去实现的。。。。

​起因是自己正在写一个俄罗斯方块的小游戏,构建地图需要用到二维数组,首先就是二维数组的初始化,本能反应,利用两个for循环(一个比较笨的办法):

let map = []
for (let i = 0; i < 10; i++) {
  let arr = []
  for (let j = 0; j < 10; j++) {
    arr[j] = 0
  }
  map.push(arr)
}

​作为一名‘懒惰’的程序员,自然不能允许这种写法,于是想到了fill()方法,代码如下:

let map = new Array(10).fill(new Array(10).fill(0))

​可是当我进行赋值操作时:

map[0][0] = 3
/* [ [ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 3, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]...... ] */

f12打开谷歌调试面板,进入Memory面板(关于Memory面板的使用介绍,可自行查询),发现果然,声明的数组内存指向了同一个地址:

二维数组.jpeg

​这种时候,想到了map方法,创建新的数组返回,自然就不会出现上面这种情况,利用map()给大家两种初始化二维数组的写法:

let arr = Array.from(new Array(10)).map(() => new Array(10).fill(0))

let arr = [...(new Array(10))].map(() => new Array(10).fill(0))

​进入Memory面板,重新生成快照:

memory.jpeg

​之后便可以正常赋值操作了,强烈建议大家可以去了解一下Memory面板。

今天的文章js二维数组初始化问题分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/15367.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注