javascript - 如何在 JavaScript 中深度复制自定义对象?

标签 javascript object clone

我已经在这里冲浪了一​​段时间,但仍然没有找到适合我的答案。

有什么方法可以在 JS 中深度复制非普通对象吗?

我试过 jQuery.extend(true, {}, this) 但它只克隆了其中的一部分,其余部分仍然作为对另一个对象的引用。

最佳答案

这里有 3 种不同的复制对象的方法。每种方法都有利有弊,因此请通读并选择最适合您情况的方法

Object.assign 方法

使用Object.assign,它“用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象”。这会复制值和函数。在撰写本文时,浏览器支持良好但并不完美,但这是 IMO 三种方法中最好的方法。

const obj1 = {a:1, b:2};
const obj1Copy = Object.assign(obj1)

展开算子法

或者,您可以使用传播运算符 从一个对象传播到另一个对象。请记住,这将复制键的值,但如果键的值是内存地址(其他嵌套对象或数组),则它只是浅拷贝。

const obj1 = {a: () => {}, b:2}
const obj1Copy = { ...obj1 }

JSON 字符串化/解析技巧

如果对象没有任何循环引用或函数作为值,您可以使用 json stringify 技巧:

let myCopy = JSON.parse(JSON.stringify(myObject));

不需要库,并且适用于大多数对象。

关于javascript - 如何在 JavaScript 中深度复制自定义对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968366/

相关文章:

javascript - Intl.Collat​​or 降序排序

javascript - 在页面上将所有 glyphicon-chevron 的方向更改为向上或向下

javascript - Twitter Bootstrap 轮播不滑动

git - 克隆时如何忽略 .gitignore 操作?

javascript - d3 轴标记

c# - 将项目添加到 List<string> 属性

javascript - 根据数组元素的属性获取数组元素的索引

javascript - 嵌套对象的 JQuery 扩展 - 在扩展上设置 props 也会更改原始扩展对象

javascript - 克隆 div 并更改属性

svg - 我可以在不指定剪辑路径 ID 的情况下在 SVG 中应用剪辑吗?