数组 map 是否是深克隆?

[{a:2,b:3},{a:2,b:4},{a:5,b:3}].map(i=>i)

这个返回值是否完成了深克隆操作

阅读 3k
4 个回答
✓ 已被采纳

不是。因为数组 a 的元素是引用类型,map 方法里只是直接返回了每个元素,还是同一个引用地址。见下图:
image.png

如果数组 a1 里的元素都是基本类型,这么操作,确实可以实现 深克隆 的效果。
image.png

并没有,这个数组存放的是 object 对象,是个引用,map 完的数组存放的还是这个引用。
建议深入了解一下深克隆的机制

[{a:2,b:3},{a:2,b:4},{a:5,b:3}].map(i=> ({...i}))

这样才是。当然只针对你例子里的数据

数组的map方法 返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
如果一定要说克隆的话 应该是浅克隆

按照你上面的例子

let arr = [{a:2,b:3, obj: {f: 9}},{a:2,b:4},{a:5,b:3}]
let mapData = arr.map(i => i)
 mapData[0].obj.f = 10
console.log(arr[0].obj.f)  // 10
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏