js实现深拷贝的几种方式
JavaScript实现深拷贝的几种方式:
- 使用
JSON.parse
和JSON.stringify
(适用于可序列化的对象)
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
- 递归复制所有层级(适用于任何对象)
function deepClone(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] = deepClone(item);
return arr;
}, []);
}
if (obj instanceof Object) {
return Object.keys(obj).reduce((newObj, key) => {
newObj[key] = deepClone(obj[key]);
return newObj;
}, {});
}
}
- 使用
lodash
的cloneDeep
方法(需要引入lodash库)
const _ = require('lodash');
const deepClone = _.cloneDeep;
- 使用
MessageChannel
(适用于大型数据,避免阻塞UI)
function deepClone(obj) {
return new Promise((resolve) => {
const { port1, port2 } = new MessageChannel();
port2.onmessage = (ev) => resolve(ev.data);
port1.postMessage(obj);
});
}
- 使用
structuredClone
(实验性功能,不是所有浏览器都支持)
function deepClone(obj) {
return structuredClone(obj);
}
选择合适的方法根据你的具体需求和对象类型进行深拷贝操作。
评论已关闭