作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我已经在这里冲浪了一段时间,但仍然没有找到适合我的答案。
有什么方法可以在 JS 中深度复制非普通对象吗?
我试过 jQuery.extend(true, {}, this)
但它只克隆了其中的一部分,其余部分仍然作为对另一个对象的引用。
最佳答案
这里有 3 种不同的复制对象的方法。每种方法都有利有弊,因此请通读并选择最适合您情况的方法
使用Object.assign
,它“用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象”。这会复制值和函数。在撰写本文时,浏览器支持良好但并不完美,但这是 IMO 三种方法中最好的方法。
const obj1 = {a:1, b:2};
const obj1Copy = Object.assign(obj1)
或者,您可以使用传播运算符
从一个对象传播到另一个对象。请记住,这将复制键的值,但如果键的值是内存地址(其他嵌套对象或数组),则它只是浅拷贝。
const obj1 = {a: () => {}, b:2}
const obj1Copy = { ...obj1 }
如果对象没有任何循环引用或函数作为值,您可以使用 json stringify 技巧:
let myCopy = JSON.parse(JSON.stringify(myObject));
不需要库,并且适用于大多数对象。
关于javascript - 如何在 JavaScript 中深度复制自定义对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39968366/
我是一名优秀的程序员,十分优秀!