JavaScript数组对象的浅拷贝与深拷贝 实现对象深拷贝的方法(5种)
在JavaScript中,实现对象的深拷贝可以有多种方法,以下是5种常见的实现方式:
- 使用
JSON.parse
和JSON.stringify
const obj = { a: 1, b: { c: 2 } };
const deepCopy = JSON.parse(JSON.stringify(obj));
- 使用
Object.assign
递归
function deepCopy(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
if (obj instanceof Date) {
return new Date(obj.getTime());
}
if (obj instanceof Array) {
return obj.reduce((arr, item, i) => {
arr[i] = deepCopy(item);
return arr;
}, []);
}
return Object.keys(obj).reduce((newObj, key) => {
newObj[key] = deepCopy(obj[key]);
return newObj;
}, {});
}
- 使用
lodash
的cloneDeep
方法
const _ = require('lodash');
const obj = { a: 1, b: { c: 2 } };
const deepCopy = _.cloneDeep(obj);
- 使用
structuredClone
(实验性功能)
const obj = { a: 1, b: { c: 2 } };
const deepCopy = structuredClone(obj);
- 使用
Blob
和URL
构造一个深拷贝
const obj = { a: 1, b: { c: 2 } };
const deepCopy = new Blob([obj]);
deepCopy = await deepCopy.arrayBuffer();
deepCopy = new Uint8Array(deepCopy);
deepCopy = Object.assign({}, obj);
这些方法各有优缺点,选择哪种方法取决于具体场景和对性能、代码可读性的要求。
评论已关闭