TS枚举
枚举是一个被命名的整型常数的集合,用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型
通俗来说,枚举就是一个对象的所有可能取值的集合
在日常生活中也很常见,例如表示星期的 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY 就可以看成是一个枚举
枚举的说明与结构和联合相似,其形式为:
类型可以分成:
- 数字枚举
- 字符串枚举
- 异构枚举
#数字枚举
当我们声明一个枚举类型是,虽然没有给它们赋值,但是它们的值其实是默认的数字类型,而且默认从 0 开始依次累加:
字符串枚举
递归
在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);