JavaScript/TypeScript二维数组push元素时所有子数组同步修改问题
二维数组push元素后所有子数组同步变化的问题解决
你遇到的问题核心在于new Array(4).fill(new Array())的工作机制:fill方法会把同一个空数组的引用重复填充到新数组的每一个索引位置。这意味着adj里的4个子数组其实指向的是内存中的同一个数组,所以你给adj[0]添加元素时,所有子数组都会同步显示这个变化——因为它们根本就是同一个东西。
正确的初始化方式
要创建每个独立的子数组,可以用以下两种方法:
方法1:使用Array.from
Array.from的第二个参数是映射函数,会为每个元素生成独立的空数组:
let adj = Array.from({ length: 4 }, () => []) adj[0].push(1) console.log(adj) // 输出:[[1], [], [], []]
方法2:循环初始化
手动遍历数组,为每个索引赋值新的空数组:
let adj = new Array(4) for (let i = 0; i < adj.length; i++) { adj[i] = [] } adj[0].push(1) console.log(adj) // 输出:[[1], [], [], []]
内容的提问来源于stack exchange,提问作者Amit Biswas
相关产品推荐
相关产品推荐

