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

JavaScript中使用扩展运算符复制数组后修改仍影响原数组的问题

问题解析与解决方案

为什么原数组会被修改?

[...users]这种展开语法做的是浅拷贝——它只会复制数组本身的结构,但数组里的元素是对象类型,拷贝的只是对象的引用,不是对象本身。也就是说,list里的每个元素和users里的对应元素指向的是同一个内存里的对象。

你在map里直接修改x.userName的时候,本质上是在修改那个共享的对象,所以原数组users里的对象自然也会跟着变。

怎么实现不影响原数组的修改?

要避免修改原数组,你需要在map的时候创建新的对象,而不是直接修改原对象的属性。可以用对象展开语法来生成新对象:

var users = [{userUID : '123', userName : 'TOTO'},{userUID : '345', userName : 'TITI'},{userUID : '678', userName : 'TATA'}]
// 直接在map里生成新对象,无需额外拷贝数组
var listModifie = users.map(x => {
  // 创建新对象,复制原对象所有属性后修改指定字段
  return {
    ...x,
    userName: x.userUID === '678' ? '' : x.userName
  }
})

console.log(users) // 原数组完全不受影响
console.log(listModifie) // 得到修改后的新数组

这样listModifie里的每个元素都是全新的对象,和原数组users里的对象没有引用关系,修改新对象就不会影响原数组了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:57:03