You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌套数组修改异常求助: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:40:19