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

文章讲述了在JavaScript中使用fill方法创建二维数组时遇到的问题:当填充的参数是引用类型时,所有元素共享同一地址。文章提供了三种解决方法:使用for循环填充新数组,利用Array.from(),以及使用map方法创建新的独立副本。
摘要由CSDN通过智能技术生成

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

const arr = new Array(5).fill(new Array(2).fill(0))

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

arr[0][0] = 1

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

原因:

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

解决方法:

1.for循环填充行

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

2.Array.from()

const arr = Array.from(new Array(5).fill(), () => new Array(2).fill(0))

3.数组的map方法

let arr = new Array(5).fill(0).map(item=>new Array(2).fill(0))
  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值