关于使用ES6中Array.fill遇到的坑
程序员文章站
2022-03-10 18:14:26
...
const length = 2
const dataList = new Array(length).fill([])
dataList[0].push(1)
console.log(dataList)
// [[1], [1]]
你想去动态改变其中某一项的值,你会发现整个数组里面的值全都变化了,这是因为你忽略了这个方法的一个注意事项:
如果填充的类型为对象,那么被赋值的是同一个内存地址的对象,而不是深拷贝对象。
意思就是说填充的是对象,那么所有被填充的对象都指向同一个地址。所以这里我们需要将dataList深拷贝一下,再修改其值。
const length = 2
const dataList = new Array(length).fill([])
const newDataList = JSON.parse(JSON.stringify(dataList))
newDataList[0].push(1)
console.log(newDataList)
// [[1], []]
Array.fill还是比较适用于简单数据类型