什么是递归
简单的说就是在函数内部调用此函数
function foo() {
foo()
}
//仅作示例,真这么写就堆栈溢出了
怎么用递归
- 大问题分解为相同的小问题
- 设置明确的终止条件
- 虽然是重复运行同一函数但每一步都会更接近终止条件。
//求1到n的和
function sum(n){
if(n==1) return 1;
return sum(n-1) + n;
}
实际应用
let arr = [
{
_id: '5bf93b99f18bee3ccce96389',
name: '吃饭',
children: [{_id: '5bf93b99f18bee3ccce9638a', name: '午饭',children: []}] },
{_id: '5bf93b99f18bee3ccce96388',
name: '睡觉',
children: [] }
]
树状结构,需要把每一个对象的id与name取出并重新存入一维数组。也就是不能有children了
function extract (arr) {
let array = []
;(function iteration (arr) {
for (const element of arr) {
array.push({ id: element._id, name: element.name })
if (element.hasOwnProperty('children') && element.children.length > 0) {
iteration(element.children)
}
}
})(arr)
return array
}
运行一下结果正确,多套几层也能成功展开。
[ { id: '5bf93b99f18bee3ccce96389', name: '吃饭' },
{ id: '5bf93b99f18bee3ccce9638a', name: '午饭' },
{ id: '5bf93b99f18bee3ccce96388', name: '睡觉' } ]