请用js实现一个深拷贝函数
时间: 2023-11-24 14:07:33 浏览: 30
以下是一个使用递归的深拷贝函数:
```
function deepCopy(obj) {
if (typeof obj !== "object" || obj === null) {
return obj;
}
let copy = Array.isArray(obj) ? [] : {};
Object.keys(obj).forEach(key => {
copy[key] = deepCopy(obj[key]);
});
return copy;
}
```
该函数接受一个参数 `obj`,如果 `obj` 不是对象或者为 `null`,则直接返回 `obj`。否则创建一个变量 `copy`,如果 `obj` 是数组则将 `copy` 初始化为空数组,否则初始化为空对象。然后遍历 `obj` 的属性,使用递归的方式深拷贝每个属性的值。最后返回 `copy`。
相关问题
用JavaScript实现一个深拷贝
实现深拷贝可以使用递归的方式,对于对象和数组进行遍历,将每个属性值都复制一份。下面是一个使用 JavaScript 实现深拷贝的示例代码:
```javascript
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let result;
if (obj instanceof Array) {
result = [];
for (let i = 0; i < obj.length; i++) {
result.push(deepCopy(obj[i]));
}
} else {
result = {};
for (let key in obj) {
result[key] = deepCopy(obj[key]);
}
}
return result;
}
```
这个函数会检查传入的参数是否为对象或数组,如果是基础类型则直接返回,否则遍历对象或数组的每个属性,对每个属性进行复制并返回一个新的对象或数组。
js手写一个深拷贝函数
当然可以!以下是一个用 JavaScript 手写的深拷贝函数:
```javascript
function deepClone(obj) {
// 检查是否为数组或对象
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let clone = Array.isArray(obj) ? [] : {};
// 遍历对象的所有属性/元素并进行深拷贝
for (let key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
clone[key] = deepClone(obj[key]);
}
}
return clone;
}
```
你可以使用这个函数来深拷贝一个对象或者数组,例如:
```javascript
let originalObj = {
name: "John",
age: 30,
hobbies: ["reading", "coding"],
address: {
street: "123 Main St",
city: "New York"
}
};
let clonedObj = deepClone(originalObj);
console.log(clonedObj);
```
这样,`clonedObj` 将是 `originalObj` 的一个完全独立的副本,对其进行修改不会影响原始对象。