Rob*_*015 11 javascript clone object
我一直在这里冲浪一段时间,仍然没有找到适合我的答案.
有没有办法在JS中深层复制非普通对象?
我已经尝试了,jQuery.extend(true, {}, this)
但它只克隆了一些,剩下的仍然是另一个对象的参考.
Mic*_*per 12
以下是3种不同的复制对象的方法.每种方法都有利有弊,所以请仔细阅读并选择最适合您情况的方法
使用Object.assign
,"用于将所有可枚举的自有属性的值从一个或多个源对象复制到目标对象".这会复制值和函数.在撰写本文时,浏览器支持很好,但并不完美,但这是三者中最好的IMO方法.
const obj1 = {a:1, b:2};
const obj1Copy = Object.assign(obj1)
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用它spread operator
从一个对象传播到另一个对象.请记住,这将复制键的值,但如果键的值是内存地址(另一个嵌套对象或数组),那么它只是一个浅拷贝.
const obj1 = {a: () => {}, b:2}
const obj1Copy = { ...obj1 }
Run Code Online (Sandbox Code Playgroud)
如果对象没有任何循环引用或函数作为值,则可以使用json stringify技巧:
let myCopy = JSON.parse(JSON.stringify(myObject));
Run Code Online (Sandbox Code Playgroud)
不需要库,并且对大多数对象都很有效.
您可以使用lodash的cloneDeep函数 - https://lodash.com/docs/4.16.4#cloneDeep
示例(来自文档)
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = _.cloneDeep(objects);
console.log(deep[0] === objects[0]);
// => false
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
11749 次 |
最近记录: |