嵌套数组修改异常求助:push方法数据全部填充至所有项
问题原因
你遇到的问题核心在于new Array(4).fill([])的工作机制:当fill方法接收的是引用类型值(比如数组、对象)时,它不会为数组的每个位置创建新的实例,而是把同一个引用赋值给所有索引位置。
换句话说,input[0]、input[1]、input[2]、input[3]其实指向的是内存里的同一个空数组。你调用input[key].push(value)时,不管指定哪个索引,本质都是在修改那个唯一的数组,所以最终所有位置都会显示相同的内容。
修复方法
有两种简单的方式可以创建每个元素都是独立空数组的嵌套数组:
- 用
Array.from生成,通过映射函数每次返回新数组:
let input = Array.from({length: 4}, () => []);
- 手动循环初始化每个元素:
let input = new Array(4); for (let i = 0; i < input.length; i++) { input[i] = []; }
用第一种方法修改后的完整代码如下,运行后就能得到符合预期的结果:
let input = Array.from({length: 4}, () => []); let data = [[0,1],[3,2],[2,1]]; for(let i = 0; i < data.length; i++){ const key = data[i][1] const value = data[i][0] input[key].push(value) } console.log(input) // 输出: [[], [0,2], [3], []]
内容的提问来源于stack exchange,提问作者Nghi Nguyen
相关产品推荐
相关产品推荐

