JS递归实现深拷贝的方法

function deepClone(obj) {
  if (typeof obj !== 'object' || obj === null) {
    return obj;
  }

  let clone = Array.isArray(obj) ? [] : {};

  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      clone[key] = deepClone(obj[key]);
    }
  }

  return clone;
}

const obj = {
  name: 'John',
  age: 30,
  address: {
    city: 'New York',
    country: 'USA'
  },
  hobbies: ['reading', 'coding']
};

const cloneObj = deepClone(obj);
console.log(cloneObj);

        在上述示例中,我们定义了一个名为deepClone的函数,它接收一个对象作为参数,并返回该对象的深拷贝副本。

        首先,我们检查传入的参数是否为基本类型或null,如果是,则直接返回该值。否则,我们创建一个空对象或数组作为克隆对象。

        然后,我们使用for...in循环遍历原始对象的所有属性。对于每个属性,我们递归调用deepClone函数来深拷贝其值,并将其赋值给克隆对象的相应属性。

        最后,我们返回克隆对象。

        请注意,这只是一个简单的示例,实际的深拷贝实现可能需要处理更复杂的数据结构和边界情况。在实际应用中,你可能会考虑使用第三方库,如lodashcloneDeep函数,来实现更全面和可靠的深拷贝功能。

要使用第三方库lodash的cloneDeep函数来实现深拷贝,首先你需要安装lodash库。

你可以使用npm或yarn来安装lodash:

npm install lodash

或者

yarn add lodash

安装完成后,你可以使用cloneDeep函数来进行深拷贝:

const _ = require('lodash');

const obj = {
  name: 'John',
  age: 30,
  address: {
    city: 'New York',
    country: 'USA'
  },
  hobbies: ['reading', 'coding']
};

const cloneObj = _.cloneDeep(obj);
console.log(cloneObj);

        在上述示例中,我们使用require函数导入lodash库,并将其赋值给变量_。然后,我们使用_.cloneDeep函数来进行深拷贝,将原始对象obj作为参数传递给该函数。

        最后,我们将深拷贝的对象打印到控制台。

        使用lodash的cloneDeep函数可以更方便地实现深拷贝,而且它可以处理更复杂的数据结构和边界情况,比自己手动实现深拷贝更可靠和高效

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值