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

使用splice删除数组重复项时为何两个数组会同时被修改?

问题原因

你代码中的let ArrayCopy = MainArray没有生成独立的数组副本,本质是给同一个数组绑定了两个不同的变量名。
在JavaScript中,数组属于引用类型,变量存储的是数组在内存中的引用地址,赋值操作只会拷贝这个地址,不会在内存中生成新的数组。也就是说MainArray和ArrayCopy指向的是完全相同的数组,你对ArrayCopy调用splice删除元素,相当于直接修改MainArray对应的数组,所以两者的长度会同步变化。

修复方案

如果需要创建独立的数组副本,仅修改副本不影响原数组,可以用以下任意一种方式实现数组浅拷贝(你的场景仅需要删除数组元素,不需要修改元素内部属性,浅拷贝完全够用):

  • 使用扩展运算符:let ArrayCopy = [...MainArray]
  • 使用slice方法:let ArrayCopy = MainArray.slice()
  • 使用Array.from方法:let ArrayCopy = Array.from(MainArray)

额外优化建议

你当前的需求是避免重复配对,其实不需要额外维护一个拷贝数组,只要把内层循环的起始下标从0改成i+1即可:内层循环永远只遍历当前外层元素之后的内容,天然不会出现A匹配B和B匹配A的重复结果,逻辑更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:39:04