帮我写一个js 深拷贝
时间: 2023-03-10 08:28:37 浏览: 69
我可以给你提供一个简单的 JavaScript 深拷贝函数: function deepCopy(obj) {
let copyObj = {}
for (let key in obj) {
if (typeof obj[key] === 'object') {
copyObj[key] = deepCopy(obj[key])
} else {
copyObj[key] = obj[key]
}
}
return copyObj
}
相关问题
帮我写一个js深拷贝的代码
好的,以下是一个简单的 JS 深拷贝的代码实现:
```javascript
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;
}
```
使用方法:
```javascript
let original = {
name: 'John',
age: 30,
hobbies: ['reading', 'traveling'],
address: {
city: 'New York',
state: 'NY'
}
};
let copy = deepCopy(original);
console.log(copy); // { name: 'John', age: 30, hobbies: [ 'reading', 'traveling' ], address: { city: 'New York', state: 'NY' } }
// 修改副本的值
copy.name = 'Mike';
copy.hobbies.push('swimming');
copy.address.city = 'Los Angeles';
// 验证原始对象是否被修改
console.log(original); // { name: 'John', age: 30, hobbies: [ 'reading', 'traveling' ], address: { city: 'New York', state: 'NY' } }
```
手写一个深拷贝用js
在JavaScript中,实现深拷贝可以使用递归和循环来遍历对象的所有属性,并创建一个全新的对象来存储拷贝后的值。下面是一个手写的深拷贝函数示例:
```javascript
function deepClone(obj) {
if (obj === null || typeof obj !== 'object') {
return obj;
}
let clone = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
clone[key] = deepClone(obj[key]);
}
}
return clone;
}
```
这个函数会递归地遍历对象的每个属性,并创建一个新的对象来存储拷贝后的值。它会处理对象和数组,并且会正确地处理嵌套的对象和数组。
使用示例:
```javascript
let obj = {
name: 'John',
age: 30,
hobbies: ['reading', 'coding'],
address: {
city: 'New York',
country: 'USA'
}
};
let cloneObj = deepClone(obj);
console.log(cloneObj);
```
这样就可以得到一个完全独立的深拷贝对象。