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))
相关推荐
TheITSea39 分钟前
JavaScript Web APIs
开发语言·前端·javascript
恋猫de小郭1 小时前
Android CLI 支持 AI Agent 通过 Device Streaming 调试云真机
android·前端·flutter
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-前端dist部署与Nginx反向代理rewrite
java·前端·nginx
鬓戈1 小时前
Claude Code frontend-design 插件调研 与 Vue 旧系统风格一致性方案
前端·vue.js·人工智能
开开心心就好1 小时前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
IT_陈寒1 小时前
SpringBoot自动配置的坑我帮你踩过了
前端·人工智能·后端
企业数字化笔记1 小时前
视频局部合成怎么做得自然?掩膜修复、边缘羽化、时序稳定与背景替换
java·javascript·音视频
其实防守也摸鱼1 小时前
网安自测题:掌握核心知识点的实用练习
linux·运维·服务器·前端·数据库·sql·xss
liangshanbo12154 小时前
JavaScript 面试题:Object.keys() 的返回顺序是无序的吗?
开发语言·javascript·ecmascript
geovindu4 小时前
css: Timeline scribble
前端·css·iphone