写一个js的深拷贝函数
时间: 2023-05-12 09:07:04 浏览: 59
好的,以下是一个js的深拷贝函数:
```
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let copy = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
copy[key] = deepCopy(obj[key]);
}
}
return copy;
}
```
这个函数可以深拷贝一个对象或数组,避免了浅拷贝的问题。
相关问题
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` 的一个完全独立的副本,对其进行修改不会影响原始对象。
提供一个javascript的深拷贝函数代码
// 深拷贝函数
function deepClone(obj) {
// 判断拷贝的要进行的是数组还是对象,是数组的话进行数组拷贝,对象的话进行对象拷贝
var objClone = Array.isArray(obj) ? [] : {};
// 进行深拷贝的不能为空,并且是对象或者是
if (obj && typeof obj === "object") {
for (key in obj) {
if (obj.hasOwnProperty(key)) {
// 判断ojb子元素是否为对象,如果是,递归复制
if (obj[key] && typeof obj[key] === "object") {
objClone[key] = deepClone(obj[key]);
} else {
// 如果不是,简单复制
objClone[key] = obj[key];
}
}
}
}
return objClone;
}