深入理解JavaScript中的集合去重、递归、浅拷贝、深拷贝和递归深拷贝


前言

提示:这里可以添加本文要记录的大概内容:

本篇博客将深入探讨Set去重、递归、浅拷贝、深拷贝和递归深拷贝概念,并提供详细的解释和示例代码。


提示:以下是本篇文章正文内容,下面案例可供参考

一、集合去重(Set去重):

集合去重是指从一个数组中删除重复的元素,使每个元素在数组中只出现一次。在JavaScript中,可以使用Set数据结构来实现集合去重。Set是一种有序列表,它不允许重复的值出现。

const arr = [1, 2, 3, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];
console.log(uniqueArr); // [1, 2, 3, 4, 5]

在上述代码中,我们使用Set数据结构创建了一个新的Set对象,并通过扩展运算符将其转换回数组格式,从而实现了数组的去重。

二、递归:

递归是一种函数调用自身的技术。在JavaScript中,递归常用于处理嵌套的数据结构,如树形结构或多层嵌套的对象。
总结:函数中自己调用自己就是递归,切记要有终止条件,不然进入死循环

function factorial(n) {
  if (n === 0) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}
console.log(factorial(5)); // 120

在上述代码中,我们定义了一个阶乘函数factorial,它通过递归调用自身来计算给定数字的阶乘。递归函数需要设置终止条件,以避免无限递归。

三、浅拷贝:

浅拷贝是指创建一个新对象,新对象的一些属性是原对象的引用。在JavaScript中,可以使用Object.assign()或展开运算符…来实现浅拷贝。

const obj1 = { name: "John", age: 30 };
const obj2 = Object.assign({}, obj1);
// 或者使用展开运算符
// const obj2 = { ...obj1 };
obj2.age = 40;
console.log(obj1); // { name: "John", age: 30 }
console.log(obj2); // { name: "John", age: 40 }

在上述代码中,我们使用Object.assign()方法或展开运算符创建了一个新对象obj2,它与原对象obj1具有相同的属性。修改obj2的属性不会影响obj1的属性,因为它们引用的是不同的内存地址。

四、深拷贝:

深拷贝是指创建一个新对象,新对象的所有属性都是原对象属性的副本,而不是引用。在JavaScript中,可以使用递归和JSON.parse(JSON.stringify())等方法实现深拷贝。

const obj1 = { name: "John", age: 30 };
const obj2 = JSON.parse(JSON.stringify(obj1));
obj2.age = 40;
console.log(obj1); // { name: "John", age: 30 }
console.log(obj2); // { name: "John", age: 40 }

在上述代码中,我们使用JSON.stringify()将对象转换为JSON字符串,再使用JSON.parse()将JSON字符串转换回对象,从而实现了对象的深拷贝。需要注意的是,这种方法无法拷贝函数和特殊对象(如正则表达式)。

五、递归深拷贝:

function deepClone(obj) {
        if (!typeof obj == "object") return "传入的不是引用类型";
        let newClone = Array.isArray(obj) ? [] : {};
        for (const key in obj) {
          newClone[key] =
            typeof obj[key] == "object" ? deepClone(obj[key]) : obj[key];
        }
        return newClone;
      }
      const dep = deepClone(obj);
      dep.a = 2;
      dep.b.c = 3;
      console.log(dep, obj);

总结

在JavaScript编程中,集合去重、递归、浅拷贝、深拷贝和递归深拷贝是非常有用的技术。通过掌握这些概念和相应的实现方法,我们可以更好地处理重复数据、嵌套结构和对象复制的需求,提高代码的效率和可维护性。

希望本篇博客能够帮助读者更好地理解和应用集合去重、递归、浅拷贝、深拷贝和递归深拷贝的概念,并在实际开发中发挥作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值