js 对象数组深拷贝
时间: 2023-11-08 10:04:43 浏览: 47
在JavaScript中,实现对象数组的深拷贝有多种方法。一种常用的方法是使用递归来遍历数组和对象,对每一个元素进行深拷贝。还有一种方法是使用`JSON.parse`和`JSON.stringify`来进行转换。
以下是两种实现对象数组深拷贝的方法:
方法1:使用递归进行深拷贝
```javascript
function deepCopy(obj) {
if (typeof obj !== 'object' || obj === null) {
return obj;
}
let copy;
if (Array.isArray(obj)) {
copy = [];
for (let i = 0; i < obj.length; i++) {
copy[i = deepCopy(obj[i]);
}
} else {
copy = {};
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
copy[key = deepCopy(obj[key]);
}
}
}
return copy;
}
// 使用示例
var test = [{"name":"demi"},{"name":"lily"}];
var testCopy = deepCopy(test);
testCopy
相关问题
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 }));
```
无论使用哪种方法,都要注意对象数组中嵌套的对象或数组的拷贝。如果对象数组中的元素是引用类型,需要确保它们也进行深拷贝,而不仅是浅拷贝。
js对象数组深拷贝方法
JavaScript 中的对象数组深拷贝方法有很多种,下面列举几种常见的方法:
1. 使用 JSON.stringify 和 JSON.parse 方法
这种方法利用 JSON 对象的 stringify 和 parse 方法,将对象转换为字符串再转换回来,达到深拷贝的目的。
```javascript
let arr = [{name: "张三", age: 18}, {name: "李四", age: 20}];
let newArr = JSON.parse(JSON.stringify(arr));
```
2. 递归复制对象
这种方法通过递归复制对象的每个属性和属性值,达到深拷贝的目的。
```javascript
function deepClone(obj) {
let newObj = Array.isArray(obj) ? [] : {};
for (let key in obj) {
if (typeof obj[key] === 'object' && obj[key] !== null) {
newObj[key] = deepClone(obj[key]);
} else {
newObj[key] = obj[key];
}
}
return newObj;
}
let arr = [{name: "张三", age: 18}, {name: "李四", age: 20}];
let newArr = deepClone(arr);
```
3. 使用第三方库
还有一些第三方库(如 lodash、jQuery 等)提供了深拷贝的方法,可以直接调用。
```javascript
let arr = [{name: "张三", age: 18}, {name: "李四", age: 20}];
let newArr = _.cloneDeep(arr); // 使用 lodash 库
```