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))
相关推荐
To_OC3 小时前
别再串行写 await 了,Promise.all 才是并行请求的正确打开方式
前端·javascript·promise
To_OC3 小时前
LC 17 电话号码的字母组合:我的回溯算法,就是从这道题开窍的
javascript·算法·leetcode
vipbic3 小时前
中后台越做越乱后,我用插件化把它救回来了
前端·vue.js
Hyyy3 小时前
Computer Use 适合做什么,不适合做什么——一次真实使用后的思考
前端
小和尚同志4 小时前
前端 AI 单元测试思考与落地
前端·人工智能·aigc
invicinble5 小时前
c端系统,其实更像一个信息展示平台
前端
你怎么知道我是队长5 小时前
JavaScript的变量和数据类型介绍
开发语言·javascript·ecmascript
李姆斯6 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜6 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司6 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能