什么是递归函数
如果一个函数在内部可以调用其本身,那么这个函数就是递归函数?递归最恰当的比喻,就是查词典。我们使用的词典,本身就是递归,为了解释一个词,需要使用更多的词。当你查一个词,发现这个词的解释中某个词仍然不懂,于是你就开始查这第二个词,可惜,第二个词里仍然有不懂的词,于是查第三个词,这个查下去,一直有一个词的解释是你万千能看懂的,那么递归走到了尽头,然后你就开始后退,逐渐明白之前查过的每一个词,最终,你明白了最开始那个词的意思。
递归的特点是什么呢?
实际上,递归有两个显著的特征,终止条件和调用自己:调用自己:原问题可以分解为子问题,子问题和原问题的求解方法是一致的,既都是调用自身的同一个函数。
终止条件:递归必须有一个终止的条件,既不能无限循环地调用本身
其实,递归的过程,可以解释为出入栈的过程。
数组扁平化
什么是数组扁平化?
数组的扁平化其实就是一个嵌套多层的数组array(嵌套可以是任何成熟)转换为只有一层的数组递归思路很容易理解,就是通过循环递归的方式,一项一项地去遍历,如果每一项还是一个数组,那么就继续往下遍历,利用递归程序的方法,实现数组的每一项的链接。
浅拷贝
什么是浅拷贝?
浅拷贝只复制某个对象的引用,而不复制对象本身,新旧对象还是共享同一块内存
浅拷贝:
如果对象的第一层是简单类型 拷贝的是值
如果对象的第一层是引用类型 拷贝的引用
浅拷贝的实现方法:
Object.assgin()
展开运算符{...obj}拷贝对象
深拷贝
什么是深拷贝
深拷贝(更深层次的拷贝)不管 简单类型 或者是 引用类型 拷贝都是值
如果对象的第一层是简单类型 拷贝的是值
如果对象的第一层是引用类型 先在 先对象里面 创建一个 空对象或者是空数组 接下来 进入到 这个对象里面的
实现深拷贝的常见方法:
- 通过递归实现深拷贝
- lodash/cloneDeep
- 通过JSON.stringify()实现
-
递归实现深拷贝(上)#
步骤#
- 定义函数
deepCopy - 接收形参
oldObj - 在函数体里面判断传递进来的 形参是不是 数组 如果是数组 给一个 空数组 如果不是 给 空对象
递归实现深拷贝(中)#
步骤#
- 遍历对象
- 判断 对象的属性值 是 简单类型还是引用类型 (对象|数组)
- 如果是 简单类型 就直接赋值给 空对象或者空数组
递归实现深拷贝(下)#
步骤#
如果是引用类型,则递归调用
使用lodash库实现深拷贝#
能够使用lodash库的cloneDeep方法实现深拷贝
步骤#
- 引入
lodash库 - 调用
cloneDeep方法
使用JSON.stringify实现深拷贝#
能够使用JSON.stringify实现深拷贝
步骤#
- 将对象 转换为 json格式的字符串
- 将 json格式的字符串 再转换为 js对象