JavaScript 对象深拷贝:使用递归实现深拷贝对象及数组

深拷贝是指创建一个完全独立的副本,修改副本不会影响原始对象。对于包含数组的复杂对象,可以使用递归实现深拷贝。

实现方法:

  1. 递归遍历对象的所有属性。
  2. 如果属性值是对象或数组,则递归调用深拷贝函数。
  3. 否则直接复制属性值。

代码示例:

function deepClone(obj) {
  if (obj === null || typeof obj !== 'object') {
    return obj;
  }
  
  let result = Array.isArray(obj) ? [] : {};
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      result[key] = deepClone(obj[key]);
    }
  }
  return result;
}

使用示例:

const obj = {
  a: 1,
  'b': [2, 3, 4],
  'c': {
    'd': 5,
    'e': [6, 7, 8]
  }
};

const newObj = deepClone(obj);

console.log(newObj); // { a: 1, b: [2, 3, 4], c: { d: 5, e: [6, 7, 8] } }

newObj['b'].push(9);
newObj['c']['e'].push(10);

console.log(obj); // { a: 1, b: [2, 3, 4], c: { d: 5, e: [6, 7, 8] } }
console.log(newObj); // { a: 1, b: [2, 3, 4, 9], c: { d: 5, e: [6, 7, 8, 10] } }

解释:

  1. deepClone 函数首先判断 obj 是否为对象或 null,如果不是,则直接返回 obj
  2. 否则,根据 obj 是否为数组,创建一个新的数组或对象 result
  3. 遍历 obj 的所有属性,并使用递归调用 deepClone 函数复制每个属性值。
  4. 最后返回 result,即深拷贝后的副本。

结论:

使用递归可以有效地实现 JavaScript 对象的深拷贝,确保副本和原始对象之间完全独立。

JavaScript 对象深拷贝:使用递归实现深拷贝对象及数组

原文地址: https://www.cveoy.top/t/topic/oykG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录