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

JavaScript中fill填充嵌套数组后push操作异常的原因及解决方法

异常原因说明

Array.prototype.fill 方法传入引用类型值时,只会将同一个引用复制到数组的所有位置,不会为每个位置单独创建新的实例,这一行为是ECMAScript标准明确定义的。
你代码中new Array(10).fill([])执行时,仅生成了1个空数组,bucket的10个元素全部指向这个空数组的内存地址。你后续给bucket[0]直接赋值[1,2],相当于把第0位的引用替换为了独立的新数组,剩下索引1到9仍然共享初始的同一个空数组引用,因此对bucket[1]执行push操作时,本质是修改所有索引共享的那个数组,所有位置都会同步显示修改结果。

正确实现方案

要实现每个嵌套数组独立,可选用以下两种常用方案:

  • 方案1:使用Array.from初始化,回调函数每次执行都会返回全新的空数组
let bucket = Array.from({length: 10}, () => []);
bucket[0] = [1,2];
bucket[1].push(3);
// 输出结果为 [[1,2], [3], [], [], [], [], [], [], [], []]
  • 方案2:通过循环逐个初始化嵌套数组
let bucket = new Array(10);
for(let i = 0; i < bucket.length; i++){
  bucket[i] = [];
}
bucket[0] = [1,2];
bucket[1].push(3);

内容的提问来源于stack exchange,提问作者Howard Do

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 23:36:00