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

Vue3中ref数组调用push方法时推送到所有子数组的问题

问题原因分析:为什么所有子数组都被添加了元素?

你对Array.fill()的运行机制存在核心误解:

  • Array.fill([])填充的是同一个数组引用
    JavaScript里数组属于引用类型,fill([])只会在调用时创建一个空数组,然后把这个数组的内存地址复制到新数组的每一个位置。也就是说,modifiedSchedules.value里的所有子数组,本质上都是指向同一个内存空间的同一个数组。当你调用modifiedSchedules.value[index].push(myObject)时,其实是在修改那个唯一的数组,所以所有子数组看起来都被添加了元素。

  • 正确的二维数组创建方式
    要生成包含多个独立空数组的二维数组,需要为每个索引位置单独创建新数组,比如用Array.from()或者map():

    // 方式1:Array.from
    modifiedSchedules.value = Array.from({ length: selectedUserIDs.value.length }, () => []);
    
    // 方式2:map
    modifiedSchedules.value = Array(selectedUserIDs.value.length).map(() => []);
    

    这两种方式都会为每个索引执行一次() => [],生成全新的空数组,每个子数组都有独立的引用,此时修改指定索引的子数组就不会影响其他子数组了。

内容的提问来源于stack exchange,提问作者Cornel Verster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:39:54