JS new Array.fill(new Array()) 创建二维数组 fill方法的坑

  我们通常会通过如下方式来创建一个二维数据:

javascript 复制代码
const arr = new Array(5).fill(new Array(2).fill(0))

  我们如果想要修改其中一个元素的值

javascript 复制代码
arr[0][0] = 1

输出:

  我们只想给arr00赋值,但是每一行数组为0的下标元素的值全部改变了,这是为什么呐?

原因:

  当fill()的参数是一个引用类型的数据时,并不是将它的值填充到数组,而是将它的地址填充到数组,那么等于把这个数据的地址给了arr的每一项,相当于每一行都指向同一个数组地址,那么当你在操作任意一个位置的值时,所有行都会跟着变化。

解决方法:

1.for循环填充行

javascript 复制代码
let arr = new Array(5)
for (let i = 0; i < 5; i++) {
    arr[i] = new Array(2).fill(0)
}

2.Array.from()

javascript 复制代码
const arr = Array.from(new Array(5).fill(), () => new Array(2).fill(0))

3.数组的map方法

javascript 复制代码
let arr = new Array(5).fill(0).map(item=>new Array(2).fill(0))
相关推荐
名字还没想好☜6 小时前
React 实现暗黑模式切换:localStorage 持久化、SSR 首屏闪烁与跟随系统主题
前端·javascript·react.js·ecmascript·react·next.js
自动化监测Learner7 小时前
主流 Web 端地图引擎对比:选型指南与优劣分析
javascript
console.log('npc')7 小时前
Git 冲突与 AI 协助指南
前端·人工智能·git·大模型
爱学堂IT分享8 小时前
Cesium可视化系统实战课程-Cesium教程学习
前端
糖墨夕9 小时前
理解大语言模型:Agent 的“大脑”
前端·agent
Rain的Java大神之路9 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
cpolar技术支持9 小时前
浏览器也能跑本地 AI:用 Transformers.js + WebGPU 做一个最小推理 Demo,cpolar 给同事远程体验
前端·ai·cpolar·webgpu·transformers.js
计算机魔术师11 小时前
OpenAI 发布 GPT-6 Astra:多项基准刷新纪录, cybersecurity 能力达 Critical 阈值
前端
xy345311 小时前
Axure9.0中继器遮罩实现方法
前端·ui·html·axure·原型·产品设计
风骏时光牛马11 小时前
智能任务自动化协同AI工作流
前端