js中递归实现深拷贝
时间: 2023-10-24 14:32:11 浏览: 133
js代码-(1)深拷贝:递归
在 JavaScript 中,可以使用递归来实现深拷贝。下面是一个示例:
```javascript
function deepCopy(obj) {
// 判断传入的参数是否为对象
if (typeof obj !== 'object' || obj === null) {
return obj;
}
// 创建一个新的对象或数组
const result = Array.isArray(obj) ? [] : {};
// 遍历原对象的属性或元素
for (let key in obj) {
// 使用递归来深拷贝每个属性或元素
if (Object.prototype.hasOwnProperty.call(obj, key)) {
result[key] = deepCopy(obj[key]);
}
}
return result;
}
// 示例用法
const obj = { name: 'CSDN', age: 10, nestedObj: { foo: 'bar' } };
const copy = deepCopy(obj);
console.log(copy); // { name: 'CSDN', age: 10, nestedObj: { foo: 'bar' } }
console.log(copy === obj); // false,两个对象引用不同
console.log(copy.nestedObj === obj.nestedObj); // false,内部对象也被深拷贝了
```
这个 `deepCopy` 函数能够递归地拷贝对象及其嵌套的对象或数组。它首先判断传入的参数是否为基本类型或 null,如果是的话直接返回原值。如果传入的是对象或数组,则创建一个新的对象或数组,然后遍历原对象的属性或元素,在新对象中对每个属性或元素执行深拷贝。最后返回新创建的对象或数组。
需要注意的是,这个示例只考虑了对象和数组的情况。如果需要深拷贝其他类型的数据,可以根据具体需求进行相应的处理。
阅读全文