Administrator
发布于 2023-09-07 / 4 阅读 / 0 评论 / 0 点赞

Array.prototype.fill() 填充对象类型问题

我们使用 Array.prototype.fill() 创建一个 一维 长度为5,二维长度也为 5,填充值为 0 的数组。

list = Array(5).fill(Array(5).fill(0))

结果如下入所示:

Array.prototype.fill() 创建二维素组问题.jpg

这么看输出结果好像没有什么问题,此时我们修改一维下标为0,二维下标也为0的数组值为 1

20230907002011.jpg

此时问题就出来了,原来fill填充的是对象引用,这算不算是一个 BUG。此时查看 MDN Array.prototype.fill()文档 发现MDN中给的二维数组的填充是如下方式,看来这个问题是真实存在的,fill只能填充基本数据类型。

20230907003031.jpgJavaScript 提供了两种基本数据类型:基本类型和对象类型。

基本类型:number、boolean、string、symbol、null、undefined

对象类型:对象、普通对象、数组、函数等等

解决方案,其实就是 换一种思路创建二维数组本质和 MDN 文档中的方案没有本质区别

  1. Array.from(Array(5).fill(0), () => Array(5).fill(0))

  2. Array(5).fill([]).map(()=>{ return Array(5).fill(0)})


评论