📅  最后修改于: 2023-12-03 14:42:31.340000             🧑  作者: Mango
在 JavaScript 中,当需要克隆一个对象数组时,如果直接使用复制操作符 =
进行赋值,会导致两个数组之间存在引用关系,即修改其中一个数组的元素,另一个数组的元素也会同步修改。
为了避免这种情况,常常需要用一些特殊的方法来克隆对象数组。
最简单的方法就是使用 for 循环,遍历原数组并将每个元素复制到新数组中。这样可以保证两个数组之间没有引用关系。
// 原数组
const originalArray = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
// 克隆数组
const clonedArray = [];
for (let i = 0; i < originalArray.length; i++) {
clonedArray.push(Object.assign({}, originalArray[i]));
}
上面的代码使用了 Object.assign() 方法,它可以将多个对象合并到一个目标对象中。我们将一个空对象{}作为目标对象,然后将原数组的每个元素作为源对象,使用 Object.assign() 方法将它们合并到目标对象中。由于每个源对象都是独立的,因此目标对象也是独立的,最终得到了一个全新的数组。
另一种复制对象数组的方法是使用 JSON 序列化与反序列化。我们可以将原数组对象转换为字符串,再将字符串转换回对象,这样就得到了一个全新的数组。
// 原数组
const originalArray = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
];
// 克隆数组
const clonedArray = JSON.parse(JSON.stringify(originalArray));
上面的代码使用了 JSON.stringify() 方法将原数组转换为字符串,再使用 JSON.parse() 方法将字符串转换为对象。这可以确保最终得到的数组对象是全新的,没有任何引用关系。
本文介绍了两种常用的 JavaScript 克隆对象数组的方法。无论使用哪种方法,都需要注意原数组中元素是否存在引用关系,以保证克隆出来的新数组完全独立。