不使用json序列化,深拷贝对象 js写
时间: 2024-03-12 13:46:06 浏览: 13
在JavaScript中,可以使用`JSON.parse()`和`JSON.stringify()`函数实现深拷贝。
首先,使用`JSON.stringify()`将对象转换为JSON字符串,然后再使用`JSON.parse()`将JSON字符串转换回JavaScript对象。这样就可以得到一个深拷贝的对象,如下所示:
```javascript
let obj = {a: 1, b: {c: 2}};
let copy_of_obj = JSON.parse(JSON.stringify(obj));
```
在这个例子中,我们首先使用`JSON.stringify()`将对象`obj`转换为JSON字符串,然后再使用`JSON.parse()`将JSON字符串转换回JavaScript对象,从而创建了一个深拷贝的对象`copy_of_obj`。
需要注意的是,这种方式只适用于可以被转换为JSON的对象,对于一些特殊的对象,比如函数、正则表达式等,可能无法正常地进行转换和拷贝。
相关问题
JSON.parse(JSON.stringify深拷贝
JSON.parse(JSON.stringify(obj))是一种常用的深拷贝方法。它的过程是将JavaScript对象通过JSON.stringify方法序列化为JSON字符串,然后再通过JSON.parse方法将JSON字符串反序列化为JavaScript对象。这样可以实现对对象的完全拷贝。需要注意的是,该方法有一些限制:
1. 如果对象中包含时间对象,则在使用JSON.parse(JSON.stringify(obj))后,时间对象将变为字符串形式,而不是时间对象本身。
2. JSON.stringify()只能序列化对象的可枚举的自有属性。对于通过构造函数生成的对象,深拷贝后会丢失constructor属性。
3. 如果对象中包含RegExp、Error对象,序列化的结果将只得到空对象。
js 对象数组深拷贝
要对 JavaScript 对象数组进行深拷贝,可以使用一些方法。以下是常见的几种方法:
1. 使用 JSON 序列化和反序列化:将对象数组先通过 JSON.stringify() 方法转换为字符串,再通过 JSON.parse() 方法将字符串转换回对象数组。
```javascript
const copy = JSON.parse(JSON.stringify(originalArray));
```
2. 使用递归函数手动复制每个对象的属性:
```javascript
function deepCopy(originalArray) {
const copy = [];
originalArray.forEach(item => {
if (typeof item === 'object' && item !== null) {
copy.push(deepCopy(item));
} else {
copy.push(item);
}
});
return copy;
}
const copy = deepCopy(originalArray);
```
3. 使用 ES6 的扩展运算符(...)和 Array.map() 方法:
```javascript
const copy = originalArray.map(item => ({ ...item }));
```
无论使用哪种方法,都要注意对象数组中嵌套的对象或数组的拷贝。如果对象数组中的元素是引用类型,需要确保它们也进行深拷贝,而不仅是浅拷贝。