笔记

77 阅读1分钟

TS枚举

枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型

通俗来说,枚举就是一个对象的所有可能取值的集合

在日常生活中也很常见,例如表示星期的 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY 就可以看成是一个枚举

枚举的说明与结构和联合相似,其形式为:

image.png 类型可以分成:

  • 数字枚举
  • 字符串枚举
  • 异构枚举

#数字枚举

当我们声明一个枚举类型是,虽然没有给它们赋值,但是它们的值其实是默认的数字类型,而且默认从 0 开始依次累加:

image.png

字符串枚举

image.png

递归

在js中函数自己调用自己,就称为递归。

 

递归函数的必要条件

递归方程以及递归结束条件,即给递归函数安排出口,否则会造成无限递归,无限递归会造成执行栈溢出,浏览器会报错。

递归的用法

一.利用递归代替for循环

        function fn(e) {
            console.log(++e);
            if (e === 10) {
                return
            }
            fn(e)
        }
        fn(0)

以上就利用递归实现了依次输出1~10,e初始化为0,打印e++所以输出1,当e等与10的时候结束,否则继续调用函数自身,依次类推,直至达到结束条件。

二.经典案例——斐波那契数列 斐波那契数列:1,1,2,3,5,8,13......

即从第三个数开始,每一个数等于前两个数之和

用代码实现:

            if (n <= 2) {
                return 1;
            } else {
                return fb1(n - 1) + fb1(n - 2);
            }
        }
        let a=fb1(6)
        console.log(a);

即f(n)=f(n-1)+f(n-2)

初始化n为8,判断n是否等于1或2,否则返回f(7)+f(6),继续调用自身,以此类推直至n-1等于2以及n-2=1。

利用递归实现多级遍历

            {
                name: "张三",
                money: 100,
                children: [
                    { name: "张欢欢", money: 200 },
                    {
                        name: "张乐乐",
                        money: 100,
                        children: [
                            { name: "张小欢", money: 300 },
                            { name: "张小乐", money: 400 },
                        ],
                    },
                ],
            },
            {
                name: "李四",
                money: 100,
                children: [
                    { name: "李红红", money: 500 },
                    { name: "李明明", money: 600 },
                ],
            },
        ];
        let total = 0
        function fn(n) {

            console.log(n);
            n.forEach((item) => {
                // console.log(item);
                if (item.children) {
                    fn(item.children)
                } else {
                    total += item.money
                }
            })
        }
        fn(arr1)
        console.log(total);