js 的数组有一个 fill 方法,可以给数组填充数据,这个方法有三个参数,从左到右依次为 要填充的数据,填充的起始位置(默认为0),停止填充的位置(默认是数组的长度),这个方法不改变原数组,如下:
let arr = [0,0,0,0,0]
let res = arr.fill(1,1,2)
console.log(res) // [0, 1, 0, 0, 0]
let oneParam = arr.fill(1)
console.log(oneParam) // [1,1,1,1,1]
console.log(arr) // [0,0,0,0,0]
问题: 有一次,我根据这个方法想要初始化一个二维数组,如下:
let arr = new Array(5).fill([])
我本来是想创建一个长度为5的数组,数组的每一项都是一个空数组,但是我遇到了一个问题,就是这个数组里面的5个数组其实指向的都是一个数组,即fill函数应该是直接我把传递的参数 [] 进行了赋值,所以我给其中一个数组赋值是,发现所有的数组都有值了,所以想要进行二维数组的初始化,不能这么做;
解决方法: 为了解决这个问题,想到了另外一个方法,就是使用map方法,如下:
let arr = new Array(5).fill(0).map(item=>[])
这里先创建一个长度为5,全为0的数组,然后map这个数组,返回一个空数组,此时每个数组就都不一样了,注意:这个fill(0)也是必要的,因为全为空的数组不会执行map函数