在 JavaScript 中,對象數組的拷貝涉及到深拷貝和淺拷貝的概念。下面簡要介紹這兩種拷貝方式:
1. 淺拷貝:
- 淺拷貝是指創建一個新的對象或數組,新對象的屬性值是對原始對象屬性的引用。也就是說,新對象和原始對象的某些屬性引用相同的內存地址。
- 對于對象數組的淺拷貝,可以使用擴展運算符 `...` 或 `Array.from()` 方法。
const originalArray = [{ name: "John" }, { name: "Jane" }];
// 使用擴展運算符進行淺拷貝
const shallowCopyArray1 = [...originalArray];
shallowCopyArray1[0].name = "Mike";
console.log(originalArray[0].name); // 輸出: Mike
// 使用 Array.from() 進行淺拷貝
const shallowCopyArray2 = Array.from(originalArray);
shallowCopyArray2[1].name = "Lily";
console.log(originalArray[1].name); // 輸出: Lily
2. 深拷貝:
- 深拷貝是指創建一個全新的對象或數組,新對象和原始對象完全獨立,不存在屬性引用共享的情況。
- 對于對象數組的深拷貝,可以使用 JSON 序列化和反序列化方法,即 `JSON.stringify()` 和 `JSON.parse()`。
const originalArray = [{ name: "John" }, { name: "Jane" }];
// 使用 JSON 序列化和反序列化進行深拷貝
const deepCopyArray = JSON.parse(JSON.stringify(originalArray));
deepCopyArray[0].name = "Mike";
console.log(originalArray[0].name); // 輸出: John
需要注意的是,使用 JSON 序列化和反序列化方法進行深拷貝時,有一些限制:
- 無法復制函數、正則表達式等特殊對象。
- 無法處理循環引用的情況。
如果需要處理更復雜的對象結構或者遇到上述限制,可以考慮使用第三方庫(如 lodash 的 `cloneDeep` 方法)來實現更可靠的深拷貝。