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

使用JavaScript的fill()与扩展语法出现异常结果的原因咨询

为什么用fill()创建二维数组会导致所有子数组同步更新?

问题出在Array.fill([])的工作机制上:

  • 当你调用Array(9).fill([])时,fill方法会把你传入的同一个空数组引用,复制到新数组的每一个位置里。也就是说,v数组里的9个元素,指向的都是内存中同一个数组对象。
  • 所以你在arr.map里执行v[i].push(val)时,本质上是在反复给同一个数组添加元素,最后每个子数组自然都会包含完整的arr内容。

而你直接写let v = [[],[],[],[],[],[],[],[],[]]时,每一个[]都是独立创建的新数组,它们各自有自己的内存地址,互不干扰。这时候v[i].push(val)只会修改对应索引位置的那个独立数组,结果就符合预期了。

如果想用类似fill的方式创建正确的二维数组,可以用Array.from来生成,它的第二个参数是回调函数,每次调用都会返回一个新的空数组:

let v = Array.from({length: 9}, () => []);

内容的提问来源于stack exchange,提问作者Ольга Сіра

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:31:01