获得徽章 0
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇沸点
#每天一个知识点#
避坑:js正确使用fill方法初始化二维数组。
首先,说一下坑,fill方法大家都知道是用来填充数组的,如 let n=new Array(3).fill(0); 会得到一个长度为3,全部被0填充的一维数组。当我们想使用它创建二维数组时候,可能会这么写 let arr = new Array(3).fill(new Array(3).fill(0)) 看似得到的二维数组也没有啥问题。但是,当给某个元素赋值时,如令arr[1][1]=1, 会发现每一个一维数组下标为1的值都被改变了。
然后,谈一下原因,当fill()的参数不是基本类型时,并不是将它的值填充到数组,而是将它的地址填充到数组,所以会出现上面的现象。
最后,讲一下如何解决。这里提供一种思路,使用map给每个一维数组分别赋值。 let arrNew = new Array(3).fill(0).map(s => new Array(3).fill(0)) 即可。
避坑:js正确使用fill方法初始化二维数组。
首先,说一下坑,fill方法大家都知道是用来填充数组的,如 let n=new Array(3).fill(0); 会得到一个长度为3,全部被0填充的一维数组。当我们想使用它创建二维数组时候,可能会这么写 let arr = new Array(3).fill(new Array(3).fill(0)) 看似得到的二维数组也没有啥问题。但是,当给某个元素赋值时,如令arr[1][1]=1, 会发现每一个一维数组下标为1的值都被改变了。
然后,谈一下原因,当fill()的参数不是基本类型时,并不是将它的值填充到数组,而是将它的地址填充到数组,所以会出现上面的现象。
最后,讲一下如何解决。这里提供一种思路,使用map给每个一维数组分别赋值。 let arrNew = new Array(3).fill(0).map(s => new Array(3).fill(0)) 即可。
展开
评论
6
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇沸点
赞了这篇文章
赞了这篇文章
赞了这篇文章
赞了这篇沸点
赞了这篇沸点
赞了这篇沸点
赞了这篇沸点
赞了这篇沸点