背景
小伙伴让我帮忙看一道算法题,其中一个环节需要根据参数的值来生成相应长度的二维数组,说的不太清楚,举个:
function reverseFn(num){
const tmpArray = [[],[],[]] //参数是3 就生成个长度是3的二维数组
.....
}
reverseFn(3)
过程
这个熟悉啊,es6有提供fill
方法,来直接上:
function reverseFn(num){
const tmpArray = new Array(num).fill([1,1,1]);
// tmpArray [[1,1,1],[1,1,1],[1,1,1]]
.....
}
打印一下,没毛病,继续往下走;
当执行tmpArray [�1][1] = 4
后习惯性的看下结果:
[
[1,4, 1],
[1,4, 1],
[1,4, 1]
]
发现二维数组的每一行都相同,看现象就能猜出来是啥情况了,
使用fill
的时候,如果参数是复杂类型的话,其填充的内容持有的是同一引用
那我们应该怎么修改呢, 我们可以使用map
来创建新数组
map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。
function reverseFn(num){
const tmpArray = new Array(n).fill([]).map(() => [1,1,1])
//tmpArray [[],[],[]]
.....
}
此时执行tmpArray [�1][1] = 4
后习惯性的看下结果:
[
[1, 1, 1],
[1, 4, 1],
[1, 1, 1]
]