📅  最后修改于: 2023-12-03 15:37:50.631000             🧑  作者: Mango
在Javascript开发中,我们常常会遇到需要复制一个对象数组的情况。然而,由于Javascript中的对象是引用类型,在简单地使用赋值操作符复制对象数组时,实际上只是复制了对象数组的指针,内存中始终只有一份数据。所以我们需要采用其他方式来复制一个对象数组。
以下是几种常见的复制对象数组的方法:
使用for循环遍历对象数组,逐个复制对象并添加到一个新的数组中。这种方法比较繁琐,但在某些情况下可能是有效的。
let oldArr = [{a: 1}, {b: 2}];
let newArr = [];
for (let i = 0; i < oldArr.length; i++) {
newArr.push(Object.assign({}, oldArr[i]));
}
console.log(newArr); // [{a: 1}, {b: 2}]
ES6引入的Spread语法可以快速地复制对象数组。利用Spread语法可以将一个数组展开成多个元素,然后重新组成一个新的数组。
let oldArr = [{a: 1}, {b: 2}];
let newArr = [...oldArr];
console.log(newArr); // [{a: 1}, {b: 2}]
需要注意的是,这种方式只适用于浅拷贝,也就是说,如果原数组中的元素是对象或数组,那么它们将会被共享。
ES6中新增了Array.from方法,可以将一个类数组对象或可迭代对象转换成一个新的数组。因此我们可以通过将对象数组放在一个Set或Map中,然后再用Array.from方法转成数组实现复制。
let oldArr = [{a: 1}, {b: 2}];
let set = new Set(oldArr);
let newArr = Array.from(set);
console.log(newArr); // [{a: 1}, {b: 2}]
需要注意的是,Set和Map只能存储唯一的值,如果原数组中有重复的元素,它们只会出现一次。
以上就是几种复制对象数组的方法,开发过程中可以根据具体情况选择最佳方式。