在JavaScript中,数组复制是一个常见的操作。ES(ECMAScript)提供了多种复制数组的方法,包括浅拷贝和深拷贝。
浅拷贝只复制数组的第一层元素,如果数组元素是对象或数组,则复制的是引用。
深拷贝会递归复制数组的所有层级,确保新数组与原数组完全独立。
原因:浅拷贝只复制了数组的第一层元素,如果数组元素是对象或数组,则复制的是引用,导致修改新数组中的对象会影响原数组。
解决方法:使用深拷贝方法,如JSON.parse(JSON.stringify())
或自定义递归函数。
let originalArray = [1, 2, {a: 3}];
let shallowCopy = [...originalArray]; // 浅拷贝
shallowCopy[2].a = 4; // 修改新数组中的对象属性
console.log(originalArray); // 输出: [1, 2, {a: 4}],原数组也被修改了
let deepCopy = JSON.parse(JSON.stringify(originalArray)); // 深拷贝
deepCopy[2].a = 5; // 修改新数组中的对象属性
console.log(originalArray); // 输出: [1, 2, {a: 4}],原数组不受影响
通过以上方法,可以有效解决数组复制过程中遇到的问题,确保数据的独立性和安全性。
领取专属 10元无门槛券
手把手带您无忧上云